为什么我的 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"
消息中正确地写了它,但在其他两个消息中却没有。
问题
我有一个简单的快速服务器(只显示套接字,路由是默认的):
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"
消息中正确地写了它,但在其他两个消息中却没有。