socket io 发出失败的回调

Posted

技术标签:

【中文标题】socket io 发出失败的回调【英文标题】:socket io emit failed callback 【发布时间】:2016-03-31 07:08:58 【问题描述】:

有没有办法知道socket io发出失败和成功,比如ajax回调方法:onSuccess,onError? 对于套接字 io 发射,我只找到:

socket.emit('publish', message:'test message',function (data) 警报(“”))

这个回调只有在服务端发送ack响应的时候才会被调用,但是不能应用于这种情况:

在向服务器发送消息的时候,网络不好或者连接断开,说明服务器没有收到这个消息,所以不调用客户端回调函数。

我想要的是:

当我调用socket io emit时,如果失败,我想重试3次。

【问题讨论】:

如果您想模仿 HTTP 行为,您必须自己编写该机制,因为它不是 websocket 工作的一部分。但是使用setTimeout 和一些标志可以很容易地完成。 你试过使用'error'事件回调吗? 【参考方案1】:

我知道这是一篇旧帖子,但以防万一有人对此仍有问题。

var socket = new io.connect('http://localhost:3000', 
    'reconnection': true,
    'reconnectionDelay': 1000,
    'reconnectionDelayMax' : 5000,
    'reconnectionAttempts': 3
);
socket.on('connect_error', function() 
    console.log('Connection failed');
);
socket.on('reconnect_failed', function() 
    // fired only after the 3 attemps in this example fail
    console.log('Reconnection failed');
);

更多信息在这里 -> https://socket.io/docs/client-api/#manager-reconnectionAttempts-value

【讨论】:

以上是关于socket io 发出失败的回调的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 中的 emit 方法的成功回调

socket.io 在 x 秒/第一次尝试获取响应失败后停止重新发出事件

socket.io 发出回调合适吗?

Http 请求 iOS 11.2 失败

Android socket.IO中的Emit或Ack超时处理?

IOS6 地理位置 watchPosition 回调失败