7

私はsocket.ioを使用してスマートフォンを(Webフレーム内で)サーバーに接続し、いくつかのメッセージを送信しています(1分あたりいくつかの短い文字列で、大きなものはありません)。スマートフォンは接続が安定しないことが多いため、socket.io は時々再接続を余儀なくされます。これは自動的に行われ、接続が現在利用できないことに気付いた後に送信したいメッセージはバッファリングされ、接続が再確立されるとバンドルとして送信されます。したがって、基本的にはすべてsocket.ioでうまくいっています。

しかし、socket.io が接続が切断されたことに気付く直前にメッセージを送信すると、メッセージが失われます。送信することはできませんが、socket.io によってバッファリングされることもありません。私はsocket.ioにかなり満足していますが、私は多くのメッセージを送信しないので、この問題は私を悩ませていますが、確実に送信するために送信するメッセージが本当に必要です. 接続が確立されている間は、すべてのメッセージが完全に送信されるため、それを確認する必要はありません。接続の損失と socket.io の間の 2 番目だけが、パケット損失に直面する重要な瞬間であることに気付きました。

シーケンス番号と ACK を使用して TCP の動作を模倣することを考えていましたが、ロケットランチャーでアリを撃つような気がします。私の質問は次のとおりです。誰かがこの問題の軽量な解決策を持っていますか、それとも自分で遭遇しましたか? 私は明示的なコードを要求することさえしません-私はそれを自分で行うことができます-しかし、この特定の問題を取り除くためのコンセプトまたはそのようなものは素晴らしいでしょう.

前もって感謝します!

4

2 に答える 2

3

すべてのメッセージをデータベースに記録してみませんか? そして、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>
于 2013-10-08T18:34:04.177 に答える