我是websocket的新手,我在Web应用程序上实现了websocket,服务器端是用java编写的,客户端是javascript。服务器通过websocket向客户端发送通知。 我想知道如果客户端能够以足够快的速度处理传入的消息而服务器发送它们的速度会发生什么。 例如,服务器可能每秒发送大约200条文本消息,客户端速度慢,每秒处理100条消息。 我相信浏览器会在收到消息之前对其进行排队,但不确定。我还知道如何检查此缓冲区大小及其限制,以及如果达到缓冲区限制会发生什么。 关于如何模拟这种情况的任何想法,我试过:
webSocket.onmessage = function (message) {
var bool = true;
var datenexexec = Date.now() + 1000;
while(bool) {
if(Date.now() > datenexexec){
bool = false;
}
}
}
但这会导致浏览器仅挂起并在以后崩溃。 谢谢你的帮助。
答案 0 :(得分:6)
为了比客户端读取数据更快地发送数据,这里最终会发生什么。
TCP是一种可靠的协议,因此它只会缓冲并稍后传输,直到缓冲区已满。它本身不应该丢失数据包(除非连接丢失),但是当缓冲区已满时,它会给你一个错误,它不能再发送,因为缓冲区已满。
对于您尝试过的客户端代码,您无法在Javascript中忙碌/等待很长时间。这会杀死事件循环并最终导致脚本引擎崩溃。
模拟这种情况的唯一方法是尝试实际发送比客户端可以处理的数据包更多的数据包。你可以编码"慢"客户端需要250ms才能在短忙/等待循环中处理每个数据包,并且快速"发送大量数据包的服务器,你应该可以模拟它。