1.WebSocket原理 websocket为应用层协议,其定义在TCP/IP协议栈之上。WebSocket连接服务器的URI以“ws”或者“wss”开头。ws开头的默认TCP端口为80,wss开头的默认端口为443。 websocket协议由RFC 6455定义。协议分为两个部分: 握手阶段和数据通信阶段。 websocket是基于http协议的,或者说借用了http的协议来完成一部分握手。
最初的握手阶段是http协议,握手完成后就切换到websocket协议,并完全与http协议脱离了。 建立通讯时,是由客户端主动发起连接请求,服务端被动监听。 通讯一旦建立连接后,通讯就是“全双工”模式了。也就是说服务端和客户端都能在任何时间自由得发送数据,非常适合服务端要主动推送实时数据的业务场景。交互模式不再是“请求-应答”模式,完全由开发者自行设计通讯协议。 通信的数据是基于“帧(frame)”的,可以传输文本数据,也可以直接传输二进制数据,效率高。当然,开发者也就要考虑封包、拆包、编号等技术细节。
2.优点 在以前的消息推送机制中,用的都是 Ajax 轮询(polling),在特定的时间间隔由浏览器自动发出请求,将服务器的消息主动的拉回来,这种方式是非常消耗资源的,因为它本质还是http请求,而且显得非常笨拙。而WebSocket 在浏览器和服务器完成一个握手的动作,在建立连接之后,服务器可以主动传送数据给客户端,客户端也可以随时向服务器发送数据。
3.关闭连接 任何一端发送关闭帧给对方,即可关闭连接。关闭连接时通常都带有关闭连接的状态码(status code)。常见状态码的含义如下: 1000 连接正常关闭 1001 端点离线,例如服务器down,或者浏览器已经离开此页面 1002 端点因为协议错误而中断连接 1003 端点因为受到不能接受的数据类型而中断连接 1004 保留 1005 保留, 用于提示应用未收到连接关闭的状态码 1006 端点异常关闭 1007 端点收到的数据帧类型不一致而导致连接关闭 1008 数据违例而关闭连接 1009 收到的消息数据太大而关闭连接 1010 客户端因为服务器未协商扩展而关闭 1011 服务器因为遭遇异常而关闭连接 1015 TLS握手失败关闭连接
4.最大连接数 默认情况下,Tomcat的WebSocket最大连接数为200。 增加并发数,只需在server.xml文件中,增加 maxThreads=“300” 这样最大的并发数就变成了300。