我正在使用 socket.io 将智能手机(在 webframe 中)连接到服务器并发送几条消息(每分钟几条短字符串,没什么大不了的)。由于智能手机往往连接不稳定,因此 socket.io 被迫时不时地重新连接。它会自动执行此操作,并且我希望它在注意到连接当前不可用后发送的消息被缓冲并在重新建立连接后作为 bundle 发送。所以基本上 socket.io 一切顺利。
但是当我在 socket.io 注意到连接断开之前发送消息时,消息丢失了。它无法传输,但也不会被 socket.io 缓冲。我对 socket.io 很满意,但这个问题困扰着我,因为我不发送很多消息,但我真的需要我发送的消息可靠地发送。建立连接后,所有消息都会完美传输,因此我不需要检查它。只有在连接丢失和 socket.io 注意到它之间的那一秒是我面临丢包的关键时刻。
我一直在考虑用序列号和 ACK 来模仿 TCP 行为,但感觉有点像用火箭发射器射 Ant 。所以我的问题是:有没有人有这个问题的轻量级解决方案,甚至自己遇到过?我什至不要求明确的代码 - 我自己可以做到 - 但是一个概念或类似的东西来摆脱这个特定的问题会很棒。
提前致谢!
最佳答案
为什么不将每条消息都记录到数据库中呢? 并使用 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>
关于javascript - Socket.io 数据包在断开和重新连接之间丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19229500/