【问题标题】:When the server opens the socket connection it is flooded with messages from the clients当服务器打开套接字连接时,它会被来自客户端的消息淹没
【发布时间】:2016-07-16 05:45:05
【问题描述】:

我启动服务器和客户端。 然后我关闭服务器,几分钟后重新打开它。 我收到太多消息(来自客户端)。 如何重置它,开始清洁。

服务器代码:

var io = require('socket.io').listen(3001);
var games=[];
	
console.log('start1 server.js');

setTimeout(clear_games,30000);

io.sockets.on('connection', function(socket)
{	 

【问题讨论】:

    标签: socket.io


    【解决方案1】:

    当您的活动 socket.io 客户端失去与服务器的连接时,它们会不断尝试重新连接,直到您的服务器重新联机并成功重新连接。这是正常和预期的行为,通常是一个非常有用的功能,因为客户端会在临时服务器重新启动或网络连接中断后自动重新建立连接。

    如果您只是想重新开始进行测试,请关闭所有客户端网页,关闭服务器,然后重新启动服务器,然后再次打开客户端网页。因为当您启动服务器时客户端网页不会打开,所以它不应该立即获得大量重新连接。

    如果您从不希望客户端自动重新连接,那么您可以在客户端代码中的一个选项中指定该选项,该选项使用{reconnection: false} 选项连接到服务器,(尽管这通常是一个坏主意,因为现在客户端如果连接暂时中断,将不会自动恢复)。

    【讨论】:

    • 我不明白。假设我有 10000 个客户端与服务器一起工作,每个客户端每 10 秒发送一条消息。如果服务器宕机 10 分钟,再次重启时需要处理 600,000 条消息。这是不现实的。我想避免它。我该怎么做?
    • @Shlomo - socket.io 就是这样设计的。它将缓冲您在服务器关闭时发送的消息,然后在重新连接时发送它们。如果这不是您想要的行为,您将不得不添加代码以防止这种情况发生。当服务器出现故障并且客户端正在发送以了解建议的内容时,我必须更多地了解所需的行为。
    • @Shlomo - 对上一个问题SocketIO stop re-emitting event after x seconds/first failed attempt to get a response 的接受答案揭示了一个可能的解决方案(在重新连接时清除缓冲数据,以便不发送),但我需要确切知道什么在确切知道自己需要什么之前,您希望行为成为现实。
    • 我阅读了您发送给我的链接。这个问题正是我问的,我很惊讶他是唯一遇到这个问题的人,应该每个人都会遇到。我无法理解答案,我的问题很简单,我收到很多消息,忽略它们需要很多时间。为什么没有一个简单的函数来重置套接字? (忽视)。我知道有一个选项“forceNew”,但所有示例都显示了如何在客户端而不是在服务器中使用它。
    • @Shlomo - 那么,其他答案是否解决了您的问题?您可以将简单的三行 socket.on('connect', ...) 处理程序添加到您的客户端代码并完成吗?或者这里还有更多事情要做吗?我无法解释为什么 socket.io 是这样的——我没有设计或研究它。它是免费的,我们照原样使用并对其进行调整以满足需求。
    【解决方案2】:

    我所做的是: 在客户端中,我添加了一个每秒调用 (setTimeout) 的监视器函数,并检查 socket.connected。 如果它没有连接,我不会向服务器发送任何消息,直到我再次看到它是真的(连接)。 这样就解决了问题。

    【讨论】:

    • 这确实不是一个非常可靠的解决方案,因为在您的计时器运行时间和连接实际上可能被标记为未连接以及您可以发送之间存在大量竞争条件。如果您打算这样做,那么您应该在每次要在其上发送数据时检查套接字是否已连接。根本不需要计时器。
    • 好点。我会添加它,但我仍然需要计时器,只是为了向用户显示错误。
    • 您可以只使用消息来查看连接何时丢失和重新建立。无需轮询标志。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2014-12-15
    • 2015-06-21
    • 2021-12-28
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多