【问题标题】:Observe the ping of socketio client at server side观察服务端socketio客户端的ping
【发布时间】:2018-07-07 00:11:22
【问题描述】:

我知道 socketio 客户端每 25 秒(心跳间隔)发送一次 ping 并从服务器获得响应。我想从服务器端的客户端打印这个 ping,并且如果可能的话还捕获节点服务器发回的 ping 响应。

我尝试过使用

socket.on("ping", function(data) {
    console.log("received ping");
});
socket.on("pong", function(data) {
    console.log("received pong");
});

在客户端和服务器端,但我无法捕获它们

【问题讨论】:

  • 这些是内部消息,不供公众使用。你真正想做什么?如果您只想查看它们是否存在,可以在 Chrome 调试器/网络选项卡中查看各个消息。
  • 我正在尝试了解 ping 行为,就像你说的我可以在 Chrome 调试器中看到它。

标签: node.js websocket socket.io


【解决方案1】:

这个sn-p可以在服务器上运行。底层engine.io server socket 的文档指定了事件监听器packetpacketCreate 的参数,该对象位于socket.conn

socket.conn.on('packet', function (packet) {
  if (packet.type === 'ping') console.log('received ping');
});

socket.conn.on('packetCreate', function (packet) {
  if (packet.type === 'pong') console.log('sending pong');
});

原来这些事件的 engine.io 文档是错误的。根据the packet eventthe packetCreate event 的来源,参数不是typedata,而是包含属性typedata 的单个参数packet

【讨论】:

  • 客户端是否需要任何代码才能使其正常工作?将该代码简单地放在服务器上不起作用(控制台日志中没有消息)
  • 谢谢,你知道这个问题第一部分的任何解决方案吗,我也在尝试在服务器控制台日志上打印来自客户端的 ping。
  • 我也是这么想的,但它实际上不起作用,它也不会抛出任何错误。我的代码看起来像const socketio = require('socket.io'); const io = socketio(server, { pingInterval: 5000, pingTimeout: 60000, }); 我正在使用您答案中的代码片段。我也尝试将它放在io.sockets.on('connection', function(socket){...}); 下,就像socket.on('disconnect', reason => {...}); 事件一样,但是这些测试都没有产生任何结果。我的 socket.io 版本是 2.0.4
  • @Adry 很抱歉造成混淆,感谢您指出这个答案是错误的。
猜你喜欢
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 2020-04-06
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多