likes
comments
collection
share

WebSocket实现聊天室

作者站长头像
站长
· 阅读数 45

使用WebSocket打造聊天室

一、理解

1、握手:客户端给浏览器发送请求,这个是基于Http协议的,但是这个协议他会标识你这个协议升级为WebSocket,然后服务端会响应你一个101状态码,这样你就建立了一个链接;(基于Http协议的)

2、数据的交互:这样客户端会主动的给服务端推送消息,服务端也会主动的给客户端推送消息,这样他们就是相互的了。

二、客户端(浏览器实现客户端)

1、用一下API进行创建WebSocket对象

let news = new WebSocket(url);

2、WebSocket事件

事件事件处理(也就是使用的时候)描述
openwebsocket对象.onopen建立连接时触发
messagewebsocket对象.onmessage客户端接收服务器数据时触发
errorwebsocket对象.onerror通信错误时触发
closewebsocket对象.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
评论
请登录