一、什么是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>
</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);
}
//断开连接时触发
@override
public void onclose(websocket websocket, int i, string s, boolean b) {
logger.info(websocket.getremotesocketaddress() + "客户端与服务器断开连接");
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(websocket);
}
@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(serverhandshake 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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论