【发布时间】:2017-04-29 04:28:06
【问题描述】:
你好我的 StackOverflow 朋友们, 我从位于 express.js 控制器函数内的套接字发射,因为我需要在用户的配置文件完成后通知用户。
我需要向调用 API 端点并触发控制器功能的特定客户端发出。
知道如何最好地做到这一点吗?
我正在考虑在 API 调用中将 socket_id 从客户端发送到服务器?
谢谢!
编辑 我意识到问题在于 express.js 和 socket.io 不共享会话数据,它们没有连接到中间件中。这篇文章设计了一个解决方案。 socket.io and express 4 sessions
【问题讨论】:
-
这里的关键是您必须能够识别是哪个客户端正在发送 API 调用,并且能够确定服务器端哪个 socket.io 连接是他们的。通常,您通过会话对象执行此操作,并且当他们与 socket.io 连接时,您将他们的套接字对象放入会话中。因此,当您收到 API 调用时,您可以进入会话对象以获取套接字或 socket.id,然后可以执行
socket.emit()。 -
您在使用会话吗?如果有,是哪一个?
-
是的,这就是我想要遵循的方法,将套接字 id 放入会话中并将其与 API 调用一起发送回服务器。是的,我确实使用了一个会话,但你所说的“哪个”是什么意思?问题是我似乎无法在客户端看到套接字 id 是什么,只能在服务器端看到。
-
我的意思是你使用哪个模块来给你一个会话?快速会话? socket.id 仅在服务器上可用,除非您在消息中明确将其发送给客户端或将其放入 cookie 中。但是,您还没有解释为什么您甚至需要在客户端上使用它。
-
好的,谢谢。是的,我使用快速会话。将套接字 ID 从客户端发送到服务器是我想象的一种方法,但我意识到这没有意义,而且套接字 ID 在客户端也不容易获得。一切都必须发生在服务器端。我意识到问题是由于 socket.io 和 express.js 没有共享会话。这篇文章设计了一个解决方案:stackoverflow.com/questions/23494016/…。或者,我设法使用会话令牌对每个套接字进行身份验证。然后我可以将套接字 id 关联到令牌(而不是会话 id)。