本文主要是介绍Java springBoot初步使用websocket的代码示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《JavaspringBoot初步使用websocket的代码示例》:本文主要介绍JavaspringBoot初步使用websocket的相关资料,WebSocket是一种实现实时双向通信的协...
一、什么是websocket
WebSocket是一种在Web应用程序中实现实时双向通信的协议。它为浏览器和服务器之间提供了一种持久连接,在一个连接上可以双向传输数据。相比传统的HTTP协议,WebSocket具有更低的延迟和更高的效率。
WebSocket使用了类似于握手的方式来建立连接。在握手过程中,浏览器和服务器会交换一些信息,以建立一个WebSocket连接。一旦连接建立,浏览器和服务器之间就可以实时地传输数据,而不需要每次都发起新的HTTP请求。
WebSocket协议可以在不同的平台和编程语言中实现,包括Web浏览器和服务器端。在Web浏览器中,可以使用JavaScript中的WebSocket API来实现WebSocket连接。在服务器端,可以使用各种编程语言和框架来实现WebSocket服务器。
WebSocket的应用场景非常广泛。它可以用于实时聊天应用、实时游戏、实时股票行情、实时协作编辑等需要实时通信的应用程序。通过WebSocket,开发人员可以更加方便地实现实时通信功能,提高用户体验。
这里我们使用Java配合springboot2进行使用。
二、依赖坐标地址
1.springBoot父级依赖
<!--依赖的父级工程--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.6</version> <relativePath/> </parent>
2.springBoot依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
3.webSocket依赖
<dependency> <groupId>org.java-websocket</groupId> <artifactId>Java-WebSocket</artifactId> <version>1.3.8</version>GrDfRD </dependency>
三、代码
不多说了,直接拿去看吧,都在注释里面了。
服务器:
package com.Blockchain.qgy.network.websocket; import com.blockchain.qgy.util.Strings; import org.java_websocket.WebSocket; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.List; @Component public class P2pPointServer { //日志记录 private Logger logger = LoggerFactory.getLogger(P2pPointServer.class); //本机的Server的WebSocket端口 private Integer port = 7001; //所有连接到服务器的WebSocket缓存器 private List<WebSocket> localSockets = new ArrayList<>(); public List<WebSocket> getLocalSockets() { return localSockets; } public void setLocalSockets(List<WebSocket> localSockets) { this.localSockets = localSockets; } @PostConstruct @Order(1) public void initServer(){ final WebSocketServer socketServer = new WebSocketServer(new InetSocketAddress(port)) { //创建链接成功时触发 @Override public void onOpen(WebSocket webSocket, ClientHandshake clientHandshake) { sendMessage(webSocket,"孩子们,我回来了!"); localSockets.add(webSocket); } //断开连接时触发 @Overrphpide public void onClose(WebSocket webSocket, int i, String s, boolean b) { logger.info(webSocket.getRemoteSockethttp://www.chinasem.cnAddress() + "客户端与服务器断开连接"); localSockets.remove(webSocket); } //接收到消息时触发 @Override public void onMessage(WebSocket webSocket, String s) { logger.info("收到了客户端的消息:" + s); sendMessage(webSocket,"孩子们,我收到消息了"); } //连接发送错误时调用,后触发onClose方法 @Override public void onError(WebSocket webSocket, Exception e) { logger.info(webSocket.getRemoteSocketAddress() + "客户端与服务器连接发送错误"); localSockets.remove(wjsebSocket); } @Override public void onStart() { logger.info("孩子们我要启动了!!"); } }; socketServer.start(); logger.info("Man!what can I say,我已经启动了"); } /** * 一对一发送 * @param webSocket:客户端 * @param message:信息 */ public void sendMessage(WebSocket webSocket,String message){ logger.info("发送给"+webSocket.getRemoteSocketAddress().getPort() + "的p2p消息是:" + message); webSocket.send(message); } /** * 一对多发送 * @param message:信息 */ public void broatcast(String message){ if (localSockets.size() == 0 || Strings.isNullOrEmpty(message)) return; logger.info("张开第三只眼"); for (WebSocket webSocket : localSockets){ this.sendMessage(webSocket,message); } logger.info("孩子们我燃尽了"); } }
客户端:
package com.blockchain.qgy.network.websocket; import com.blockchain.qgy.util.Strings; import org.java_websocket.WebSocket; import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.net.URI; import java.util.ArrayList; import java.util.List; @Component public class P2pPointClient { //日志记录 private Logger logger = LoggerFactory.getLogger(P2pPointClient.class); //服务器端的地址 private String wsUrl = "ws://localhost:7001/"; //所有连接到客户端的WebSocket缓存器 private List<WebSocket> localSockets = new ArrayList<>(); public List<WebSocket> getLocalSockets() { return localSockets; } public void setLocalSockets(List<WebSocket> localSockets) { this.localSockets = localSockets; } @PostConstruct @Order(2) public void connectServer(){ try { final WebSocketClient socketClient = new WebSocketClient(new URI(wsUrl)) { @Override public void onOpen(ServerHandshphpake serverHandshake) { sendMessage(this,"孩子们,我是客户端"); localSockets.add(this); } @Override public void onMessage(String s) { logger.info("收到服务器发来的信息:"+s); } @Override public void onClose(int i, String s, boolean b) { logger.info("断开连接"); localSockets.remove(this); } @Override public void onError(Exception e) { logger.info("连接错误"); localSockets.remove(this); } }; socketClient.connect(); } catch (Exception e) { e.printStackTrace(); logger.info("连接错误"); } } /** * 一对一发送 * @param webSocket:客户端 * @param message:信息 */ public void sendMessage(WebSocket webSocket,String message){ logger.info("发送给"+webSocket.getRemoteSocketAddress().getPort() + "的p2p消息是:" + message); webSocket.send(message); } /** * 一对多发送 * @param message:信息 */ public void broatcast(String message){ if (localSockets.size() == 0 || Strings.isNullOrEmpty(message)) return; logger.info("张开第三只眼"); for (WebSocket webSocket : localSockets){ this.sendMessage(webSocket,message); } logger.info("孩子们我燃尽了"); } }
总结
到此这篇关于Java springBoot初步使用websocket的文章就介绍到这了,更多相关springBoot使用websocket内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!
这篇关于Java springBoot初步使用websocket的代码示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!