使用webSocket需要注意什么
发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,这篇文章将为大家详细讲解有关使用webSocket需要注意什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 什么是webSocket一种网络通信协议,是 HT
千家信息网最后更新 2024年11月20日使用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安全错误
数据库的锁怎样保障安全
江西双路机架服务器
怎么在电脑上登录指定服务器
网络安全8k纸画画
英雄联盟是什么软件开发
web数据库详解
软件开发模型的特点和异同
对软件开发专业知识的感想
100台服务器集群虚拟化设计
刷宝为什么服务器无数据返回
广州有信互联网科技有限公司
电竞vr软件开发
智能家居服务器
大型软件开发技术
荆州管理软件开发价格
网页数据库安全问题
数据库默认地址
组态王做服务器和数采仪
长垣租房网络安全
台州黄岩APP软件开发
数据库共享存储
黄浦区无线网络技术特价
合肥财经计算机网络技术答案
网络技术 内容
东西湖区网络安全基地
一个数据库怎么创建两个表
神经网络技术前景
数据库系统日期前一天函数
代码量多少算数据库吗
易易网络技术有限公司
怎么给数据库表里加两个字段