在 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 中使用第一个连接发送一些状态的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 由于数据大小而断开连接

是否可以使用单向 socket.io 连接?

Socket.io 不会在断开连接时向房间发送消息

断开连接/错误时清除 socket.io 缓冲区

Socket.IO 和 HapiJS 之间的连接

为啥重新连接成功时socket.io客户端会发送离线消息?