官网英文参考:
http://docs.oracle.com/javaee/7/tutorial/doc/websocket001.htm#BABDABHF
中文解析:
Websocket 应用,server作为一个Websocket 端点,client 通过server的URL地址连接到server.一旦server和client连接建立,那就是对称连接。server和client在连接open的时候,可以再任何时候,相互发送信息。一个client通常只连接一个server,server支持多个client连接。
Websocket协议分为两个部分(握手和数据交换)。客户端通过URL地址初始化握手请求,握手协议兼容目前的HTTP协议。server收到请求,将其理解为一个HTTP连接升级请求。
客户端发起的连接握手请求如下图:
GET /path/to/websocket/endpoint HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
Origin: http://localhost
Sec-WebSocket-Version: 13
服务端的回复请求如:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=
server通过一个方法,利用
Sec-WebSocket-Key来产生
Sec-WebSocket-Accept。客户端通过同样的方法,利用
Sec-WebSocket-Key 产生
Sec-WebSocket-Accept。如果接收的回复值和自己计算的值是一样的,那么就建立连接。握手成功之后,server和client就可以发送消息。
Websocket支持文本格式和二进制格式,Websocket的方法有close,ping,pong.ping,pong 连个方法可以包含数据。
Websocket 端点通过URIS区分表示,具体有下面两种方式:
ws://host:port/path?query
wss://host:port/path?query
ws 表示非加密连接,wss 表示加密连接,端口是可以指定的。非加密通信默认是80端口,加密连接默认是443端口,path 是server 端点的路径,query是可选项。
主流浏览器都实现Websocket协议,而且提供javascript 接口(连接到server 端点,发送信息,回调)