为什么我的 python 套接字客户端不向我的 node.js 服务器发送事件?

Why is my python socket client not sending events to my node.js server?

问题

我有一个简单的快速服务器(只显示套接字,路由是默认的):

io.on('connection', (socket) => {
  socket.emit('identify')
  
  socket.on('identity', (data) => {
    activeUsers.push(data['name'])
    socket.name = data['name']
    console.log('Connection from ' + socket.name)
  });

  io.on('disconnect', (data) => {
    activeUsers.splice(indexOf(socket.name))
    console.log(socket.name + ' disconnected.')
  })
  
  io.on('message', (data) => {
    console.log(data['message'])
  });
});

然后我写了一个 python 客户端,连接正常:

@io.event
def connect():
  print('connected')

@io.on("identify")
def identity():
  io.emit("identity", {"name": "isaiah08"})

但是,当我将标识更改为:

@io.on("identify")
def identity():
  io.emit("identity", {"name": "isaiah08"})
  io.emit("message", {"message": "I WILL EAT YOU"})

它没有记录消息。这是为什么?

备注

是的,我在 / 路由中创建了一个套接字:

<script>
  var socket = io();
</script>

我连接到正确的网站。

您没有在您的服务器上正确注册 message 的事件处理程序,因此消息已到达,但接收它的消息处理程序配置不正确。

改变这个:

  io.on('disconnect', (data) => {
    activeUsers.splice(indexOf(socket.name))
    console.log(socket.name + ' disconnected.')
  })
  
  io.on('message', (data) => {
    console.log(data['message'])
  });

对此:

  socket.on('disconnect', (data) => {
    activeUsers.splice(indexOf(socket.name))
    console.log(socket.name + ' disconnected.')
  })
  
  socket.on('message', (data) => {
    console.log(data['message'])
  });

这些消息到达 socket,而不是 io 对象。您在 "identify" 消息中正确地写了它,但在其他两个消息中却没有。