任何人都可以向我解释socket.io/nodejs中的"volatile"消息吗?

Yos*_*shi 14 node.js socket.io

在新的socket.io v0.7中,有一个新功能"易失性消息".

在"如何使用"中,他们这样写:(在http://socket.io/#how-to-use)

发送易失性消息.

有时可以删除某些消息.假设你有一个应用程序显示关键字的实时>推文bieber.

如果某个客户端还没有准备好接收消息(因为网络速度慢或其他>问题,或者因为他通过长轮询连接并处于请求 - >响应周期的中间),如果他没有收到所有推文与bieber相关的申请>不会受到影响.

在这种情况下,您可能希望将这些消息作为易失性消息发送.

因为我认为volatile是不一致的,所以为什么他们告诉我们应该使用volatile消息来表示我们不能错过的消息类型?那些默认消息呢?我必须做些什么来确保消息将传达给客户?

此外,我还想问一下xhr-multipart传输.我没有在v0.7中的传输列表中看到它.它被删除了吗?

Alf*_*red 13

就像它说通常socket.io跟踪它收到的消息,如果我用户错过了一条消息,它将再次发送.如果您不希望这种开销(额外工作),您可以使用易失性消息,用户可能会错过消息.如果您还希望收到消息,则可以使用确认(回调)=>

服务器:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.on('ferret', function (name, fn) {
    fn('woot');
  });
});
Run Code Online (Sandbox Code Playgroud)

客户:

<script>
  var socket = io.connect(); // TIP: .connect with no args does auto-discovery
  socket.on('connection', function () {
    socket.emit('ferret', 'tobi', function (data) {
      console.log(data); // data will be 'woot'
    });
  });
</script>
Run Code Online (Sandbox Code Playgroud)

我也找不到xhr-multipart,但我想如果你真的想知道你可以问Guille吗?

  • 我对这个答案感到非常不安.TCP/IP协议本身确保已收到消息(以及已收到数据包).因此,除非websocket实现中有一些大漏洞,否则不需要发送非易失性的消息.请解释一下,这并不是说文档. (5认同)
  • @TomášZato除了websocket之外,socket.io还支持其他几种协议,例如在长轮询的情况下,客户端并不总是连接到服务器. (2认同)