Socket.io 数据包在断开连接和重新连接之间丢失
Socket.io packets get lost between dis- and reconnect
我正在使用 socket.io 将智能手机(在网络框架中(连接到服务器并发送一些消息(每分钟几个短字符串,没什么大不了的(。由于智能手机的连接往往不稳定,因此 socket.io 被迫时不时地重新连接。它会自动执行此操作,并且在它注意到连接当前不可用后我希望它发送的消息将被缓冲并在重新建立连接后作为捆绑包发送。所以基本上一切都很顺利 socket.io。
但是,当我在 socket.io 注意到连接消失之前发送消息时,消息会丢失。它不能被传输,但它也不会被 socket.io 缓冲。我对 socket.io 很满意,但这个问题困扰着我,因为我不会发送很多消息,但我真的需要我发送的消息可靠地发送。建立连接后,所有消息都会完美传输,所以我不需要检查。只有连接丢失和 socket.io 注意到它之间的一秒钟是我面临丢包的关键时刻。
我一直在考虑用序列号和 ACK 模仿 TCP 行为,但这感觉有点像用火箭发射器射击蚂蚁。所以我的问题是:有没有人对这个问题有轻量级的解决方案,甚至自己也遇到过?我什至不要求显式代码 - 我可以自己做 - 但是摆脱这个特定问题的概念或类似的东西会很棒。
提前感谢!
为什么不将每条消息记录到数据库中?并使用 socket.io 确认选项使其变得更好。
从 http://socket.io/#how-to-use服务器
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.on('ferret', function (name, fn) {
fn('woot');
});
});
客户
<script>
var socket = io.connect(); // TIP: .connect with no args does auto-discovery
socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too!
socket.emit('ferret', 'tobi', function (data) {
console.log(data); // data will be 'woot'
});
});
</script>
如果它那么重要,我可能会模仿TCP的天真版本。只需存储一个缓冲区客户端,并让服务器响应以确认消息,否则从缓冲区再次发送。
相关文章:
- 当客户端在JW Player中恢复丢失的连接时,会自动重新连接
- PeerJS自动重新连接
- Node.js REST与MySQL句柄重新连接
- Socket.IO socket.id 更改同一客户端而不重新连接
- 设置流星重新连接时间
- 如何通过重新连接实现共享重播
- 重新连接具有共享RxJS observable的WebSocket
- 重新连接 JavaScript 函数
- 如何在自动重新连接超时后重新连接socket.io客户端
- Socket.IO:重新连接导致服务器连接代码运行两次
- 重新分配变量和重新定义之间的性能差异
- node.js/socket.io:重新连接时刷新表
- 套接字发出 重新连接套接字后不触发
- Socket.io :断开连接后重新连接时如何执行某些操作
- SAPUI5:无效和重新渲染之间的区别
- 断开并手动重新连接 Socket.IO
- Socket.io 数据包在断开连接和重新连接之间丢失
- 重新连接并断开突变观察者
- Ajax 查询,无需重新连接到数据库
- 套接字 IO 重新连接