7

我正在使用 socket.io 将智能手机(在网络框架中)连接到服务器并发送一些消息(每分钟几个短字符串,没什么大不了的)。由于智能手机的连接往往不稳定,socket.io 不得不时不时地重新连接。它会自动执行此操作,并且在它注意到连接当前不可用后我希望它发送的消息被缓冲并在重新建立连接后作为捆绑发送。所以基本上,socket.io 一切顺利。

但是当我在 socket.io 注意到连接消失之前发送一条消息时,消息就丢失了。它不能被传输,但它也不会被 socket.io 缓冲。我对 socket.io 很满意,但是这个问题困扰着我,因为我不发送很多消息,但我确实需要那些我发送的消息能够可靠地发送。建立连接后,所有消息都会完美传输,因此我不需要检查。只有连接丢失和socket.io之间的第二个注意到它是我面临丢包的关键时刻。

我一直在考虑用序列号和 ACK 模拟 TCP 行为,但感觉有点像用火箭发射器射击蚂蚁。所以我的问题是:有没有人有这个问题的轻量级解决方案,甚至自己遇到过?我什至不要求明确的代码——我可以自己做——但是摆脱这个特定问题的概念或类似的东西会很棒。

提前致谢!

4

2 回答 2

3

为什么不将每条消息都记录到数据库中?并使用 socket.io 确认选项使其变得更好。

来自http://socket.io/#how-to-use SERVER

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>
于 2013-10-08T18:34:04.177 回答
0

如果它那么重要,我可能会模仿 TCP 的幼稚版本。只需存储缓冲区客户端并让服务器响应确认消息,否则从缓冲区再次发送。

于 2013-10-08T14:12:14.713 回答