使用webSocket需要注意什么
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章将为大家详细讲解有关使用webSocket需要注意什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 什么是webSocket一种网络通信协议,是 HT
千家信息网最后更新 2025年01月23日使用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 CopyOnWriteArraySetuser = 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安全错误
数据库的锁怎样保障安全
驻马店审计局网络安全
wind数据库能查企业专利吗
无锡java软件开发价格
腾讯云服务器安全组默认配置
提交临床试验数据库指导原则
动漫软件开发报啥学校
软件开发过去的工作总结
爱客宝网络技术有限公司
德州星峰软件开发有限公司
计算网络技术专升本考哪些科目
软件开发进货
网络安全反诈教育知识内容
360 网络安全评估
海口机架式服务器
中学生信息网络安全冬令营
数据库箱子
hive与关系型数据库的共同点
数据库提示100004错误
灵武办公软件开发价格表
黑客 网络安全 公安
静态服务器的文件
第七史诗各个服务器抽奖更新时间
荆州订制软件开发多少钱
无法连接到服务器设置pin
学校公物租借数据库
数据源和数据库
剑灵盛世区服务器
原神PC老是断开服务器连接
软件开发组队
营口网络安全公司