这是我参与「第四届青训营 」笔记创作活动的的第五天
写在前面
在写大项目时,有个需求需要服务端和客户端的持久化通信,需要服务端主动请求客户端,因此我去学习webSocket。这一篇是上一篇的延续,用来记录学习过程中的webSocket的使用的一些学习记录
客户端实现
-
创建webSocket对象
var ws = new webSocket(url); //url格式说明:ws://ip地址:端口号/资源名称 -
webSocket事件
事件 事件处理程序 描述 open websocket对象.onopen 创立连接时触发 message websocket对象.onmessage 客户端接收到服务端的数据时触发 error websocket对象.onerror 通信发生错误时触发 close websocket对象.onclose 连接关闭时触发 -
webSocket方法
方法 描述 send() 使用连接向服务器发送数据
服务端实现
-
基于Java WebSocket规范,其由一系列的WebSocketEndpoint组成。Endpoint是一个java对象,代表WebSocket链接的一端,对于服务端,可视为处理具体WebSocket消息的接口,就像Servlet与http请求一样
-
实现方式
- 编程式:继承类Endpoint并实现其方法
- 注解式:定义一个POJO,并添加@ServerEndpoint相关注解
-
相关生命周期方法
方法 描述 注解 onClose 关闭会话 @OnClose onOpen 开启新会话,在服务端与客户端握手成功后调用 @OnOpen onError 连接过程中异常时调用 @OnError onMessage 接收客户端发送过来的消息 @OnMessage -
服务端接收数据
- 为Session添加MessageHandler(消息处理器)来接收数据
- 若采用注解开发,也可使用@OnMessage来指定接收消息的方法
-
服务端推送数据
- 由RemoteEndpoint完成,其实例由Session维护
- Session.getBasicRemote:获取同步消息发送的实例
- Session.getAsyncRemote:获取异步消息发送的实例
- sendXxx( ):实例用于发送消息的方法
- 由RemoteEndpoint完成,其实例由Session维护
写在最后
以上便是我的一些学习笔记,若有不足,欢迎指出