马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目次
1.1 WebSocket介绍
http协议:
webSocket协议:
1.2WebSocket协议:
1.3客户端(浏览器)实现
1.3.2 WebSocket对象的相关事宜:
1.3.3 WebSOcket方法
1.4 服务端实现
服务端怎样吸取客户端发送的哀求呢?
服务端怎样推送数据给客户端呢?
1.1 WebSocket介绍
WebSocket 是一种网络通信协议。
WebSocket是HTML5开始提供的一种在单个TCP毗连上进行全双工通信的协议。
HTTP 协议是一种无状态、无毗连、单向的应用层协议。它采用了 哀求/相应 模子。通信哀求只能由客户端发起,服务端对哀求做出应答处置惩罚。(单向的:采用的是哀求+相应的模式)
这种通信模子有一个弊端:HTTP协议无法实现服务器主动向客户端发起消息。
这种单项哀求的特点,注定了假如服务器有连续的状态变化,客户端要获知就非常麻烦。大多数Web应用程序将通过频繁的异步ajax哀求实现长轮询。轮询服从低,非常浪费资源(必须不停的毗连,大概HTTP毗连始终打开)
http协议:
webSocket协议:
1.2WebSocket协议:
WebSocket协议有两个部门,握手和数据传输
握手时基于http协议,在数据传输阶段基于WebSocket协议
1.3客户端(浏览器)实现
- var ws = new WebSocket(url);
- //参数url格式说明: ws://ip地址:端口号/资源名称
复制代码 1.3.2 WebSocket对象的相关事宜:
变乱
| 变乱处置惩罚程序
| 形貌
| open
| websocket对象.onopen
| 毗连建立时触发
| message
| websocket对象.onmessage
| 客户端吸取服务端数据时触发
| error
| websocket对象.onerror
| 通信发生错误时触发
| close
| websocket对象.onclose
| 毗连关闭时触发
| 1.3.3 WebSOcket方法
WebSocket对象的相关方法:
1.4 服务端实现
Java WebSocket应用一系列的WebSocketEndpoint组成。Endpoint是一个java对象,代表WebSocket链接的一端,对于服务端,我们可以视为处置惩罚具体WebSocket消息的接口。【一个EndPoint对象和一个客户端产生逐一对应的关系】
我们可以通过两种方式定义Endpoint:
- 编程式:继承类 javax.websocket.Endpoint并实现其方法。
- 注解式:即定义一个POJO,并添加@ServerEndpoint相关注解
Endpoint实例在WebSocket握手时创建,并在客户端与服务端毗连过程中有用,末了在链接关闭时结束。在Endpoint接口中明确了定义与其生命周期相关的方法,生命周期方法如下:
方法
| 寄义形貌
| 注解
| onClose
| 当会话关闭时调用。
| @OnClose
| onOpen
| 当开启一个新的会话时调用, 该方法是客户端与服务端握手乐成后调用的方法。
| @OnOpen
| onError
| 当毗连过程中异常时调用。
| @OnError
| 服务端怎样吸取客户端发送的哀求呢?
通过为Session添加MessageHandler消息处置惩罚器来吸取消息,当采用注解方式定义EndPoint时,我们还可以通过@OnMessage注解指定吸取消息的方法。
服务端怎样推送数据给客户端呢?
发送消息则由 Remote Endpoint完成,实在例由Session维护,根据利用环境,我们可以通过Session.getBasicRemote 获取同步消息发送的实例,然后调用其 sendXxx( )方法就可以发送消息,可以通过Session.getAsyncRemote获取异步消息发送实例。
下面是一个简朴的案例:
- @ServerEndpoint("/robin")
- public class ChatEndPoint {
- private static Set<ChatEndPoint> webSocketSet = new HashSet<>();
- private Session session;
- @OnMessage
- public void onMessage(String message, Session session) throws IOException {
- System.out.println("接收的消息是:" + message);
- System.out.println(session);
- //将消息发送给其他的用户
- for (Chat chat : webSocketSet) {
- if(chat != this) {
- chat.session.getBasicRemote().sendText(message);
- }
- }
- }
- @OnOpen
- public void onOpen(Session session) {
- this.session = session;
- webSocketSet.add(this);
- }
- @OnClose
- public void onClose(Session seesion) {
- System.out.println("连接关闭了。。。");
- }
- @OnError
- public void onError(Session session,Throwable error) {
- System.out.println("出错了。。。。" + error.getMessage());
- }
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |