如果连接没有建立,如何超时

时间:2017-01-27 15:23:37

标签: javascript node.js express socket.io

是否有任何默认超时值,如果连接未建立,经过多次尝试后,我从socket.io API获得超时?在我的应用程序中,我尝试使用socket.io连接Nodejs服务器但是如果连接没有建立或无法访问我希望至少我在x次尝试后得到一些事件然后我应该通知用户服务器存在连接问题。但有些我的客户端如何不断尝试连接服务器并在控制台上打印以下异常:

socket.io-1.3.5.js:2 GET https://chatapp.local:8898/socket.io/?EIO=3&transport=polling&t=1485528658982-172 net::ERR_CONNECTION_REFUSED

这是我的代码:

  socket = io(socketUrl, {'force new connection': true});

    socket.on('connect', function () {
        uiHandler("socket.connect");
    });

    socket.on('error', function (err) {
        uiHandler("socket.error", {error: err});
    });

    socket.on('disconnect', function() {
        uiHandler("socket.disconnect");
    });

    socket.on('end', function() {
        uiHandler("socket.end");
    });

如果连接未在30秒内建立,我如何设置超时。有任何建议请。

1 个答案:

答案 0 :(得分:0)

根据我在API文档中阅读的内容,您可以设置每个连接的超时值和重试次数,因此如果您想尝试30秒,则基本上有

maxTime = timeout * reconnectionAttempts

请注意,每次重试(默认为1000毫秒)和随机因素之间都有延迟。如果您希望在向客户端发出 ConnectionError 之前完全控制持续时间,将不得不修补他们一点点。

从API文档中,您还可以看到每次连接失败时,错误都会以 connect_timeout connection_error 的形式发出。如果每次可用尝试都失败,则会触发 reconnect_failed 。然后,您将能够告诉您的用户出现了问题。

以更一般的方式,您可以使用多种方法来实现对异步进程的控制。立即想到两个:承诺和可观察性。您可能希望探索它们以获得更通用的功能。可扩展的方法。

如果您需要更多详细信息或我没有正确回答,请随时在通讯中询问。