Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用pusher-pubnub-socketio将事件发送到单个客户端_Javascript_Ruby On Rails_Node.js_Pusher_Pubnub - Fatal编程技术网

Javascript 如何使用pusher-pubnub-socketio将事件发送到单个客户端

Javascript 如何使用pusher-pubnub-socketio将事件发送到单个客户端,javascript,ruby-on-rails,node.js,pusher,pubnub,Javascript,Ruby On Rails,Node.js,Pusher,Pubnub,我正在构建一个基于回合的多人游戏,客户端和服务器之间的通信是通过。我可以使用游戏频道向所有客户发送事件。问题是如何将事件发送到单个客户端?Pusher并没有关于它的文档,唯一的解决方案似乎就是使用它。是否可以为每个向单个客户端发送事件的客户端验证专用通道,或者是否有更好的解决方案?您在回答中提到了最佳解决方案。您应该能够非常轻松地以编程方式为每个用户设置频道,然后通过这些频道向他们广播消息 e、 这是一个Ruby示例,但应该清楚发生了什么 user = SOME_USER_OBJECT Push

我正在构建一个基于回合的多人游戏,客户端和服务器之间的通信是通过。我可以使用游戏频道向所有客户发送事件。问题是如何将事件发送到单个客户端?Pusher并没有关于它的文档,唯一的解决方案似乎就是使用它。是否可以为每个向单个客户端发送事件的客户端验证专用通道,或者是否有更好的解决方案?

您在回答中提到了最佳解决方案。您应该能够非常轻松地以编程方式为每个用户设置频道,然后通过这些频道向他们广播消息

e、 这是一个Ruby示例,但应该清楚发生了什么

user = SOME_USER_OBJECT
Pusher.trigger("card-data-#{user.id}", 'card-update', {data: {card_id: 1, status: 'used'})
或者类似的。显然,您需要在客户端确保用户订阅了正确的频道

显然,如果您需要通道是安全的,那么,正如您所说,您可以使用经过身份验证的通道-在您的情况下,使用私有通道可能是有意义的


如果您还有任何问题,可以在这里再次回答,我会看一看,或者您可以通过电子邮件发送支持。

而不是创建单独的频道,您可以为每个客户端订阅单独的事件。

PubNub Stream Filter 如果您使用的是PubNub,您可以为每个用户创建一个唯一的通道,只需将适当的消息发布到每个通道,也可以为所有用户创建一个公共通道,并使用流过滤器功能,以便每个客户端只在该通道上获取他们想要的消息。此过滤在服务器端执行,因此最终用户不会收到必须忽略的不需要的消息

这是使用流过滤器的简单高级步骤

在客户端初始化PubNub时,使用meta参数创建一个过滤器 发布消息时,向元参数添加键/值,该元参数将用于过滤PubNub网络上的消息,然后根据每个订阅者的筛选器将消息发送给订阅者。 对于您通过标签提到的每个SDK的全流过滤文档:


您还可以使用将每条消息路由到适当的用户通道,或者在发布前事件处理程序中将通道映射到最终用户。我不会详细讨论这个问题,因为它涉及的内容稍微多一些,但如有必要,请随时询问其他见解。要开始,您可以查看完整的。

您可以随数据一起发送一个ID,然后在客户端事件处理程序上检查正确的ID,如果与客户端无关,则忽略。每个客户端使用一个通道既昂贵又复杂。@dandavis,向每个人发送不相关的数据会很昂贵。socket.io有一种简单的发送到特定套接字的方法,如何使用Pusher?这些服务是为广播而设计的,因此它们可以扩展到socket.io在单个线程上可以轻松完成的范围之外。根本没有单一的客户端发射/发送/广播功能,所以您必须做一些其他的事情。多通道是一种选择,客户端过滤是另一种选择。如果您更关心带宽而不是延迟,那么会出现第三个选项:向all发送一个带有/id的更改通知,并且具有正确id的客户机执行ajax调用以获取私有数据。这可以让你的信号管道与大量或私人数据保持整洁,但确实会增加几十毫秒的延迟…我必须向每个玩家发送他们的卡,因此必须进行身份验证,什么是@dandavisy的最佳解决方案你需要服务器知道的客户机机密,并且永远不要通过套接字发送。细节ajax调用应该在它的requirest中将eventID、clientID和客户机机密传递给服务器,如果它们符合服务器的期望,则会在ajax响应中返回数据。dandavis建议这将是开销,我应该使用ajax进行单次通信。也许是混合方法?你认为为每一个用户提供数以百万计的频道可行吗?我认为最好为每一个用户创建一个频道,因为否则,正如你所提到的,你将向用户发送大量不适合他们的信息,因此基本上是浪费的。您和客户机的开销没有区别,因为您只是触发到不同的频道,而客户机仍然只订阅了一个或多个您需要的频道——每个用户的频道恰好不同。这就是普什帮你的。您可以这样编写代码,而不必担心伸缩性-这是我们的问题: