【问题标题】:Socket.IO chat - "ping" specified clientSocket.IO 聊天 - “ping”指定客户端
【发布时间】:2013-05-12 13:42:57
【问题描述】:

我有简单的基于 Socket.IO 的聊天,当 User1 在“朋友列表”中单击 User2 时,User1 将与 User2 连接到房间(基于来自服务器的“令牌”)。当双方都打开“聊天窗口”(他们都在房间里)时​​,一切正常。

但是当他关闭聊天窗口(他没有连接到房间)时,我如何“ping”用户2?

感谢您的帮助!

编辑:

  1. User1 打开他的“好友列表”并选择 User2(聊天窗口打开 - 像 FB)
  2. 会话 User1 + User2 的客户端 JS 请求令牌
  3. Node.JS 端将 User1 连接到具有 name = token 的房间

好的,现在是房间里的 User1。但是User2不是,因为他没有打开窗口(但他是“在线”=连接到服务器io.connect(...))。

  1. User1 写了一些消息并将其发送到房间
  2. 现在我需要“ping”User2 的客户端 JS 并使用新消息打开聊天窗口(获取令牌,连接到房间)

简化客户端JS:

socket = io.connect "...", {port: 1234}
token = ajaxRequestToServerForToken mineID, hisID
socket.emit "joinIntoRoom", token

简化的 node.js 代码:

//In handler class
joinIntoRoom: (socket, token) ->
    socket.leave socket.room
    socket.join token

    socket.emit "connected"

【问题讨论】:

  • 如果没有一点代码或伪代码,这里的意思不是很清楚。您是否为不在房间内的已连接用户提供“大厅”?
  • 好的,我添加了更多信息。我有“大厅”,当用户连接到服务器时,我将他的套接字保存为 @clients[socket.id] = socket

标签: node.js socket.io


【解决方案1】:

好的,你需要一种方法来识别 user2,这样你就可以向他发出一个事件。

This question 有类似的答案 - 有帮助吗?

一旦你有了 user2 的套接字对象,你就可以调用 socket.emit('joinIntoRoom', {token: token, message: message}) 与第一条消息,然后客户端应该解释它。

【讨论】:

  • 如果我有一个User2的socket ID,获取他的socket并发出一些事件是没有问题的,但是User1在哪里可以获得User2的socket ID呢?
  • User1 不需要他的 id,服务器需要。当用户 1 向用户 2 发送第一条消息时,服务器应该向用户 2 发出一个事件,告诉他加入房间用户 1 和用户 2。从那时起,他们就可以向房间发送消息了。
猜你喜欢
  • 2015-10-12
  • 2011-01-04
  • 1970-01-01
  • 2015-07-03
  • 2015-06-01
  • 2011-12-05
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多