gpt4 book ai didi

javascript - Socket.io 在使用命名空间时不发出/接收事件

转载 作者:搜寻专家 更新时间:2023-10-31 23:38:57 25 4
gpt4 key购买 nike

我用 coffeescript 编写了以下代码,在服务器端使用了 socket.io 和 node.js

服务器

io.of("/room").authorization (handshakeData, callback) ->
#Check if authorized
callback(null,true)
.on 'connection', (socket) ->
console.log "connected!"

socket.emit 'newMessage', {msg: "Hello!!", type: 1}

socket.on 'sendMessage', (data) ->
@io.sockets.in("/room").emit 'newMessage', {msg: "New Message!!", type: 0}

客户端

socket = io.connect '/'

socket.of("/room")
.on 'connect_failed', (reason) ->
console.log 'unable to connect to namespace', reason
.on 'connect', ->
console.log 'sucessfully established a connection with the namespace'

socket.on 'newMessage', (message) ->
console.log "Message received: #{message.msg}"

我的问题是,在我开始使用 namespace 后,服务器和客户端之间的通信停止工作。我没有找到任何与此类似的工作示例,所以我可能做错了什么

最佳答案

namespace 不像在服务器端那样在客户端使用。您的客户端代码应该像这样直接连接到命名空间路径:

var socket = io.connect('/namespace');
socket.on('event', function(data) {
// handle event
});

也就是说,命名空间不同于房间。命名空间在客户端加入,而房间在服务器端加入。因此此代码将不起作用:

io.sockets.in('/namespace').emit('event', data);

您必须引用命名空间,或从全局 io 对象调用它。

var nsp = io.of('/namespace');
nsp.emit('event', data);

// or get the global reference
io.of('/namespace').emit('event', data);

关于javascript - Socket.io 在使用命名空间时不发出/接收事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18944092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com