使用webSocket需要注意什么
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章将为大家详细讲解有关使用webSocket需要注意什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 什么是webSocket一种网络通信协议,是 HT
千家信息网最后更新 2026年10月31日使用webSocket需要注意什么
这篇文章将为大家详细讲解有关使用webSocket需要注意什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1. 什么是webSocket
一种网络通信协议,是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
HTTP 协议的缺陷:通信只能由客户端发起,且服务端不能主动向客户端发送资源。
如果想要知道服务端是否准备好资源,只有采用轮询方式请求,浪费资源(因为必须不停连接,或者 HTTP 连接始终打开), websocket正是解决了这一问题,可以实现双向通信。
WebSocket目前支持两种统一资源标志符
ws和wss,类似于HTTP和HTTPS,主要是加密与非加密的两种协议。一图看懂HTTP与webSocket的原理区别:
2. webSocket的注解及使用
常用注解:
@ServerEndpoint(value = "/webSocketProxy/{nickName}")表示一个URI映射的路径,标准的restfulAPI,{nickName}为路径参数。用于注解于类上。
@OnOpen @OnMessage @OnClose @OnError
以上四个注解用于方法上,分别对应不同的事件:打开连接、收到消息、连接关闭、发生错误。当发生对应事件时,该方法将会被触发。通常开发中主要在@OnMessage方法内进行业务开发。
@PathParam("nickName")此注解用于获取路径参数{nickName}。
五种连接状态:
NOT_YET_CONNECTED, CONNECTING, OPEN, CLOSING, CLOSED;
服务端的简单实例
@ServerEndpoint(value = "/customWebSocket/{nickName}")@Component@Slf4jpublic class CustomWebSocket { // 用来存放每个客户端对应的MyWebSocket对象 全局对象 private static CopyOnWriteArraySet user = new CopyOnWriteArraySet(); // 与某个客户端的连接会话,需要通过它来给客户端发送数据 private Session session; @OnMessage public void onMessage(String message, Session session, @PathParam("nickName") String nickName) throws IOException { // 群发消息 for (CustomWebSocket myWebSocket : user) { log.info("请求url:" + session.getRequestURI()); myWebSocket.session.getBasicRemote().sendText(nickName + " :" + message); log.info("custom 收到消息:" + nickName + " :" + message); } } @OnOpen public void onOpen(Session session) { log.info("custom " + session.getId() + " open..."); this.session = session; user.add(this); } @OnClose public void onClose() { System.out.println("custom " + this.session.getId() + " close..."); session=null; user.remove(this); } @OnError public void onError(Session session, Throwable error) { session=null; log.warn("custom " + this.session.getId() + " error...",error); } 3. WebSocket的注意事项
WebSocket服务端 由spring管理后,默认是单例,但是对于WebSocket对象,每个连接会新建一个对象,因此需要注意static关键字的优雅使用。一个session对应一个会话。
特别注意这段代码,使用了static 修饰是类属性,用来存储所有连接的客户端信息。 static CopyOnWriteArraySet
user = new CopyOnWriteArraySet (); 如果报错:The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method,则是存在多线程并发发送消息的情况。采用同步机制即可。
synchronized (session){ session.getBasicRemote().sendText(JSON.toJSONString(message));}关于"使用webSocket需要注意什么"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
客户
客户端
注解
对象
消息
资源
服务
方法
篇文章
路径
通信
事件
参数
更多
端的
加密
开发
不同
不错
主动
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
有格互联网科技
保险科技 互联网保险
广州淘业互联网络科技
湖南永感互联网科技有限公司
科技互联网企业
互联网最新的科技
互联网科技与金融科技
云电互联网科技
一五八零互联网科技
青岛中康互联网医疗科技有限公司
佳云科技和互联网广告
链环科技传统企业怎么转型互联网
银川新华互联网科技学校联系电话
广州有谷有贝互联网科技有限公司
科技互联网行业投资研究
版纳互联网科技选哪家
互联网科技收购价值
保山互联网科技靠谱吗
北京品多多互联网科技有限公司
互联网的黑科技实验室
互联网科技
互联网科技有限公司经营范围
奇酷互联网科技公司
须眉科技是互联网公司吗
互联网科技创新服务
深圳艾果互联网通讯科技
互联网高科技行业有哪些企业
万物互联网智能科技
互联网科技创新方面的资料
互联网科技快速发展优美句子