WebSocket实现聊天室
使用WebSocket打造聊天室
一、理解
1、握手:客户端给浏览器发送请求,这个是基于Http协议的,但是这个协议他会标识你这个协议升级为WebSocket,然后服务端会响应你一个101
状态码,这样你就建立了一个链接;(基于Http协议的)
2、数据的交互:这样客户端会主动的给服务端推送消息,服务端也会主动的给客户端推送消息,这样他们就是相互的了。
二、客户端(浏览器实现客户端)
1、用一下API进行创建WebSocket对象
let news = new WebSocket(url);
2、WebSocket事件
事件 | 事件处理(也就是使用的时候) | 描述 |
---|---|---|
open | websocket对象.onopen | 建立连接时触发 |
message | websocket对象.onmessage | 客户端接收服务器数据时触发 |
error | websocket对象.onerror | 通信错误时触发 |
close | websocket对象.onclose | 连接关闭时触发 |
3、WebSocket方法
方法 | 描述 |
---|---|
send() | 使用连接发送数据 |
三、服务端实现
Tomcat的7.0.5版本开始支持WebSocket,并且实现了Java WebSocket规范 (JSR356)。
1、Java websocket应用由一系列的websocketEndpoint组成。Endpoint 是一个java对象,代表websocket链接的一端,对于服务端,我们可以视为处理具体Websocket消息的接口,就像servlet之 与http请求一样。
两种方式定义Endpoint :
●第一种是编程式,工即继承类javax . websocket . Endpoint并实现其方法。
●第二种是注解式, 即定义一个POJO(这是一个类),并添加@serverEndpoint相关注解(也要配置资源路径的)。
Endpoint实例在WebSocket握手时创建,并在客户端与服务端链接过程中有效,最后在链接关闭时结束。在Endpoint接口中明确定义了与其生命周期相关的方法,规范实现者确保生命周期的各个阶段调用实例的相关方法。生命周期方法如下:
方法 | 含义描述 | 注解 |
---|---|---|
onClose | 当会话关闭时调用 | @onClose |
onOpen | 当开启一个新的会话时调用,该方法时客户端与服务端握手成功后调用的方法 | @onOpen |
onError | 连接过程中异常时调用 | @onError |
服务端如何接收客户端发送的数据呢?
通过为session(这个是WebSocket的session) 添加MessageHandler消息处理器来接收消息,当采用注解方式定义Endpoint时,我们还可以通过@OnMessage注解指定接收消息的方法。
服务端如何推送数据给客户端呢?
发送消息则由RemoteEndpoint 完成,其实例由Session 维护,根据使用情况, 我们可以通过Session. getBasicRemote
获取同步消息发送的实例,然后调用其 sendXxx ()
(这个xxx是类型)方法就可以发送消息,可以通过Session. getAsyncRemote
获取异步消息发送实例。
转载自:https://juejin.cn/post/6920623507936444424