泛洪 WebSocket
Flooding WebSocket
我是 websocket 的新手,我在 Web 应用程序上实现了 websocket,服务器端是用 java 编写的,客户端是 java 脚本。服务器通过 websocket 向客户端发送通知。
我想知道如果客户端处理传入消息的速度不如服务器发送消息的速度快,会发生什么情况。
例如,服务器可能每秒发送大约 200 条文本消息,而客户端速度较慢,每秒处理 100 条消息。
我相信浏览器会在处理传入消息之前对传入消息进行排队,但不确定。我还知道如何检查此缓冲区大小及其限制,以及如果达到缓冲区限制会发生什么。
关于如何模拟这种情况的任何想法,我试过了:
webSocket.onmessage = function (message) {
var bool = true;
var datenexexec = Date.now() + 1000;
while(bool) {
if(Date.now() > datenexexec){
bool = false;
}
}
}
但这只会导致浏览器挂起并随后崩溃。
感谢您的帮助。
发送数据的速度比客户端读取速度快,最终会发生这种情况。
- 客户端接收缓冲区将填满
- TCP 流量控制将启动,服务器将被告知停止在此套接字上发送更多数据包。
- 然后服务器将缓冲传出数据包,直到流量控制限制被移除
- 最终会达到服务器端缓冲区限制,底层 TCP 会拒绝套接字写入
- 这将 return TCP 发送错误。
- 根据您为 webSocket 使用的服务器端库,您应该在某个时候从发送操作中收到错误。
TCP 是一种可靠的协议,因此它只会缓冲并稍后传输,直到缓冲区已满。它本身不应该丢失数据包(除非连接断开),但是当缓冲区已满时,它会给你一个错误,因为缓冲区已满,它不能再发送了。
至于您尝试的客户端代码,您不能在 Javascript 中 busy/wait 很长时间。这会终止事件循环并最终导致脚本引擎崩溃。
您模拟这种情况的唯一方法是尝试实际发送比客户端可以处理的更多的数据包。您可以编写一个 "slow" 客户端,它可能需要 250 毫秒来处理一个短的 busy/wait 循环中的每个数据包,以及一个 "fast" 服务器发送大量数据包,您应该能够模拟它。
我是 websocket 的新手,我在 Web 应用程序上实现了 websocket,服务器端是用 java 编写的,客户端是 java 脚本。服务器通过 websocket 向客户端发送通知。 我想知道如果客户端处理传入消息的速度不如服务器发送消息的速度快,会发生什么情况。 例如,服务器可能每秒发送大约 200 条文本消息,而客户端速度较慢,每秒处理 100 条消息。 我相信浏览器会在处理传入消息之前对传入消息进行排队,但不确定。我还知道如何检查此缓冲区大小及其限制,以及如果达到缓冲区限制会发生什么。 关于如何模拟这种情况的任何想法,我试过了:
webSocket.onmessage = function (message) {
var bool = true;
var datenexexec = Date.now() + 1000;
while(bool) {
if(Date.now() > datenexexec){
bool = false;
}
}
}
但这只会导致浏览器挂起并随后崩溃。 感谢您的帮助。
发送数据的速度比客户端读取速度快,最终会发生这种情况。
- 客户端接收缓冲区将填满
- TCP 流量控制将启动,服务器将被告知停止在此套接字上发送更多数据包。
- 然后服务器将缓冲传出数据包,直到流量控制限制被移除
- 最终会达到服务器端缓冲区限制,底层 TCP 会拒绝套接字写入
- 这将 return TCP 发送错误。
- 根据您为 webSocket 使用的服务器端库,您应该在某个时候从发送操作中收到错误。
TCP 是一种可靠的协议,因此它只会缓冲并稍后传输,直到缓冲区已满。它本身不应该丢失数据包(除非连接断开),但是当缓冲区已满时,它会给你一个错误,因为缓冲区已满,它不能再发送了。
至于您尝试的客户端代码,您不能在 Javascript 中 busy/wait 很长时间。这会终止事件循环并最终导致脚本引擎崩溃。
您模拟这种情况的唯一方法是尝试实际发送比客户端可以处理的更多的数据包。您可以编写一个 "slow" 客户端,它可能需要 250 毫秒来处理一个短的 busy/wait 循环中的每个数据包,以及一个 "fast" 服务器发送大量数据包,您应该能够模拟它。