websocket
概述
websocket是一种改进的tcp的连接,它在连接的时候借助HTTP的协议进行连接,连接成功之后就一直保持连接,保持连接的过程中就可以实现双向消息发送,跟http的不同是他只需要在连接的时候加上报文头,之后在通信的时候就不需要再发送了。
其中有一个4位的操作码,用来表示发送的报文类型,分别如下:
41 Contin = 0x0, //表示连续消息片断 42 Text = 0x1, //表示文本消息片断 43 Binary = 0x2, //表未二进制消息片断 44 // 0x3 - 0x7 非控制帧保留 45 Close = 0x8, //表示连接关闭 46 Ping = 0x9, //表示心跳检查的ping 47 Pong = 0xA, //表示心跳检查的pong 48 // 0xB - 0xF 控制帧保留 49 Unkown
ping-pong心跳检测
PING报文
ping是要求应答信号的,就是收到ping报文后,必须返回应答报文给发送方。
不同的websocket框架对应答报文的处理不一样,比如Tomcat框架,会将收到打ping报文原封不动的返回给发送方。
客户端和服务端一般是不会主动发送ping报文,必须要使用者主动发送。
PONG报文
pong是单向检测,收到之后不需要返回报文给pong报文的发送方。比如Tomcat,可以添加WsPongMessage的messagehandler进行处理。
心跳检测
对于任何一段的正常或异常关闭、比如杀进程,都是能通过关闭时间检测到,这是没问题。一个检测不到的情况就是网络断开,如果在断开期间双方都没有发起通信,那么是检测不到网络断开的。如果过了一段时间(比如十五分钟之内,超过十五分钟如果是Tomcat的服务器,也会主动断开连接)网络恢复,那么之前的连接还是可用的
https://www.cnblogs.com/xuemanjiangnan/p/7658362.html
https://blog.csdn.net/ShareUs/article/details/85246287
https://www.zhihu.com/question/20215561
https://www.cnblogs.com/interdrp/p/7903736.html
https://blog.csdn.net/u011423258/article/details/82764164
https://blog.csdn.net/zero_no1/article/details/79290566
最大连接数
https://blog.csdn.net/z915412321/article/details/52261229
Tomcat参数限制:https://blog.csdn.net/d81895606/article/details/100883085
不同框架实现的服务器:https://blog.csdn.net/thomashtq/article/details/46738253
客户端不同的层面有不同的限制
比如说操作系统的端口号最大只有六万多个,一个进程又不可能把这些端口号全都用掉
很多浏览器对连接数也有限制: IE-16个 谷歌-250个 火狐-200个
服务端
比如说Tomcat,默认有10000个限制。在springboot中可以通过以下参数调整最大连接数
server.tomcat.max-connections: '200000'
但是如果连接数很大的话会造成heap内存直接溢出,因此。要设置启动参数调大heap的大小。参数:-Xmx1024m -Xmx1024m。分别是最大堆空间,初始堆空间。