WebSocket二

简介: WebSocket二

二、实现方式

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

1.1、websocket对象

实现websocket的web浏览器将通过websocket对象公开所有必须的客户端功能(主要支持HTML5的浏览器)。以下API用于创建websocket对象:

var ws = new WebSocket(url);

参数URL 格式说明:ws://ip地址:端口号/资源名

1.2、websocket 事件

websocket 对象的相关事件
在这里插入图片描述

1.3、websocket 方法

给服务端发送消息
在这里插入图片描述

1.4、总结:客户端的API

在这里插入图片描述
在这里插入图片描述

2、服务端实现

Tomcat 的7.0.5版本开始支持WebSocket,并且实现了 Java WebSocket规范(JSR356)。

Java WebSocket应用由一系列的webSocketEndpoint组成。Endpoint 是一个java对象,代表webSocket链接的一端,对于服务端,我们可以视为处理具体webSocket消息的接口,就像servlet之与http请求一样。
我们可以通过两种方式定义Endpoint:

  • 第一种是编程式,即继承类javax.websocket. Endpoint并实现其方法
  • 第二种是注解式,即定义一个POJO,并添加@serverEndpoint相关注解。【常用】

Endpoint实例在webSocket握手时创建,并在客户端与服务端链接过程中有效,最后在链接关闭时结束。在Endpoint接口中明确定义了与其生命周期相关的方法,规范实现者确保生命周期的各个阶段调用实例的相关方法。生命周期方法如下:
在这里插入图片描述

2.1、服务端如何接收客户端发送的数据呢?

通过为session添加 MessageHandler 消息处理器来接收消息,当采用注解方式定义Endpoint时,我们还可以通过@onMessage 注解指定接收消息的方法。

2.2、服务端如何推送数据给客户端呢?

发送消息则由 RemoteEndpoint完成,其实例由session维护,根据使用情况,我们可以通过Session.getBasicRemote 获取同步消息发送的实例,然后调用其sendXxx ()【sendText()】方法就可以发送消息,可以通过session.getAsyncRemote`获取异步消息发送实例。

服务端代码

@serverEndpoint("/robin")  // @serverEndpoint("路径")
public class chatEndPoint {
   
   
    private static set<chatEndPoint > websocketset = new Hashset<>();
    private session session;
    @onMessage
    pub7ic void onMessage(string message,Session session) throws IOException {
   
   
        system.out.print1n("接收的消息是:" + message);
        system.out.print1n(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);
    }
    @onopen
    public void onopen(Session session) {
   
   
        this.session = session;
        websocketset.add(this);
    }
    @onclose
    pub1ic void onc1ose(session seesion) {
   
   
        system.out. print1n("连接关闭了。。。");
    }
    @onError
    public void onError(session session, Throwable error) {
   
   
        system. out.print1n("出错了。。。。" +error. getMessage());
    }
}

2.3、总结:服务端的实现

常用的Node实现有以下三种:
在这里插入图片描述

三、特点

  • 建立在TCP协议之上,服务端的实现比较容易
  • 与HTTP协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用HTTP协议,因此握手时不容易屏蔽,能通过各种HTTP代理服务器
  • 数据格式化比较轻量,性能开销小,通信高效。
  • 可以发送文本,也可以发送二进制数据
  • 没有同源限制,客户端可以与任意服务器通信
  • 协议标识符是ws(如果加密,则为wss),服务器网址就是URL。

    四、基于WebSocket的网页聊天室

    1、实现流程

    在这里插入图片描述

    2、消息格式

    在这里插入图片描述
相关文章
|
8月前
websocket 的使用
websocket 的使用
|
4月前
|
移动开发 网络协议 前端开发
H5与WebSocket
H5与WebSocket
|
4月前
|
移动开发 网络协议 网络安全
详解 WebSocket
详解 WebSocket
110 0
|
4月前
|
Web App开发 移动开发 JavaScript
|
5月前
|
网络协议 API 数据安全/隐私保护
websocket初识
websocket初识
53 2
|
6月前
|
Web App开发 定位技术 C#
|
8月前
|
XML JSON 前端开发
WebSocket是什么
【4月更文挑战第27天】WebSocket,即Web浏览器与Web服务器之间全双工通信标准。
|
8月前
websocket
websocket
59 0
|
8月前
|
移动开发 网络协议 前端开发
WebSocket一
WebSocket一
|
8月前
|
移动开发 网络协议 安全
Websocket
Websocket