在 Socket.io 中使用第一个连接发送一些状态
Posted
技术标签:
【中文标题】在 Socket.io 中使用第一个连接发送一些状态【英文标题】:Sending some state with first connection in Socket.io 【发布时间】:2012-12-25 14:03:02 【问题描述】:我正在使用 socket.io 并且正在寻找一种方法让客户端能够指定它想要连接到哪个房间,但我无法找到实现这一目标的好方法。
在我拥有的服务器上:
io.sockets.on 'connection', (socket)->
console.log 'A socket connected.'
socket.join('my_room')
在我的客户端上:
io = io.connect("http://domain.com")
我想做的是在客户端的第一个连接中获得一些初始状态,以便服务器知道它应该尝试将人连接到哪个房间。
所以在客户端是这样的:
io = io.connect("http://domain.com", room_1)
那么服务器就会有这样的东西:
io.sockets.on 'connection', (socket, data)->
console.log 'A socket with connected!'
socket.join(data)
这可能与房间有关吗?有没有更好的办法?我研究了命名空间,但房间更适合我想要做的事情。
【问题讨论】:
恕我直言,使用 socket.io 您不需要了解您的消息,因为您使用的是一个已经建立的连接......所以您可以在建立连接时发送一条消息。跨度> 【参考方案1】:我同意 drinchev 的观点。您应该只在客户端的连接事件上发送数据。
io = io.connect 'http://domain.com'
io.on 'connect', () ->
socket.emit('join-room', room_1)
另一个选择是使用 socket.io 命名空间。这将允许您避免往返,但命名空间和通道之间存在一些差异,您必须确定哪个对您的应用更有意义。
io = io.connect 'http://domain.com/room_1'
此处接受的答案很好地概括了渠道和命名空间之间的差异。 socket.io rooms or namespacing?
【讨论】:
酷。这很好用。我想知道是否可以跳过往返行程。谢谢你的回答。效果很好 用一个选项更新了答案,如果它适用于您的应用程序,则可以避免往返。以上是关于在 Socket.io 中使用第一个连接发送一些状态的主要内容,如果未能解决你的问题,请参考以下文章