WebSocket简介
目的
HTML5 WebSocket设计出来的目的就是取代轮询和长连接,使客户端浏览器具备像C/S框架下桌面系统的即时通讯能力,实现了浏览器和服务器全双工通信,建立在TCP之上,虽然WebSocket和HTTP一样通过TCP来传输数据,但WebSocket可以主动的向对方发送或接收数据,就像Socket一样;并且WebSocket需要类似TCP的客户端和服务端通过握手连接,连接成功后才能互相通信。
优点
双向通信、事件驱动、异步、使用ws或wss协议的客户端能够真正实现意义上的推送功能。
缺点
少部分浏览器不支持。
示例
社交聊天(微信、QQ)、弹幕、多玩家玩游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基于位置的应用、在线教育、智能家居等高实时性的场景。
WebSocket请求响应客户端服务器交互图
请求响应客户端服务器交互图.png
WebSocket方式减少了很多TCP打开和关闭连接的操作,WebSocket的资源利用率高。
java WebSocket实现
Oracle 发布的 java 的 WebSocket 的规范是 JSR356规范 ,Tomcat从7.0.27开始支持WebSocket,从7.0.47开始支持JSR-356。
websocket简单实现分为以下几个步骤:
添加websocket库
编写后台代码
编写前端代码。
添加websocket整合springboot依赖
org.springframework.boot
spring-boot-starter-websocket
后台代码实现
配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/**
* 首先注入一个ServerEndpointExporterBean,该Bean会自动注册使用@ServerEndpoint注解申明的websocket endpoint
* 链接:https://www.imooc.com/article/70702?block_id=tuijian_wz
*/
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
websocket接口实现
@ServerEndpoint(value = "/websocket") //接受websocket请求路径
@Component
public class PoundWebSocket {
private Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 保存所有在线socket连接
*/
private static Map webSocketMap = new LinkedHashMap<>();
/**
* 记录当前在线数目
*/
private static int count = 0;
/**
* 当前连接(每个websocket连入都会创建一个MyWebSocket实例
*/
private Session session;
/**
* 创建监听串口
*/
private static SerialPort serialPort = null;
/**
* 创建监听器
*/
private static SerialPortEventListener serialPortEventListener = null;
/**
* 监听串口
*/
private static String PORT_NAME;
/**
* 监听串口波特率
*/
private static int BAUD_RATE;
/**
* 数据位
*/
private static int DATA_BITS;
/**
* 停止位
*/
private static int STOP_BITS;
/**
* 奇偶位
*/
private static int PARITY;
/**
* 地磅型号
*/
private static String MODEL;
private static IPoundInfoService pou