【发布时间】:2014-09-18 01:03:03
【问题描述】:
我正在构建一个多人回合制游戏,客户端和服务器之间的通信是通过Pusher 建立的。我可以使用游戏频道向所有客户端发送事件。问题是如何向单个客户端发送事件? Pusher 没有它的文档,只有看似解决方案是使用authenticated channels。为每个向单个客户端发送事件的客户端验证专用通道是否可行,还是有更好的解决方案?
【问题讨论】:
-
您可以随数据一起发送一个 ID,然后在客户端事件处理程序上检查正确的 ID,如果与客户端无关则忽略。每个客户端使用一个频道会很昂贵且复杂。
-
@dandavis,向每个人发送不相关的数据会很昂贵。 socket.io 有一种发送到特定套接字的简单方法,我该如何使用 Pusher 呢?
-
这些服务是为广播而设计的,因此它们可以扩展超出 socket.io 在单个线程上可以轻松完成的工作。根本没有“单一客户端”发射/发送/广播功能,所以你必须做其他事情。许多渠道是一种选择,客户端过滤是另一种选择。如果您更关心带宽而不是延迟,则出现第三种选择:您向所有人发送带有 id 的更改通知,并且具有正确 id 的客户端执行 ajax 调用以获取私有数据。这可以让您的信号管道不被大量或私人数据弄得一团糟,但确实会增加几十毫秒的延迟......
-
我必须向每个玩家发送他们的卡片,因此必须进行身份验证,@dandavis 的最佳解决方案是什么
-
您需要服务器知道的客户端密码,并且永远不要通过套接字发送。 “详细信息” ajax 调用应根据需要将 eventID、clientID 和客户端密码传递给服务器,如果它们符合服务器的期望,则在 ajax 响应中返回数据。
标签: javascript ruby-on-rails node.js pusher pubnub