我创建了一个有效的Google频道AP,现在我想向所有客户发送消息。
我有两个servlet。第一个创建频道并告诉客户userid
和token
。第二个是由http post
调用的,应该发送消息。
要向客户发送消息,我使用:
channelService.sendMessage(new ChannelMessage(channelUserId, "This is a server message!"));
这会将消息发送给一个客户端。我怎么能把这个发给所有人?
我是否要存储用于创建频道的每个ID并为每个ID发送消息?我怎么能把ID传递给第二个servlet?
答案 0 :(得分:3)
使用Channel API无法创建一个频道,然后拥有许多订阅者。服务器为individual JavaScript clients创建一个唯一的频道,因此如果您拥有相同的客户端ID,则只会收到一个消息。
如果要向多个客户端发送相同的消息,简而言之,您必须跟踪活动客户端并向所有客户端发送相同的消息。
如果这种方法听起来很可怕,请考虑使用PubNub作为推送通知消息,您可以轻松创建one channel and have many subscribers。要让它在Google App Engine上运行并不难,因为它们几乎支持任何platform or device。
答案 1 :(得分:3)
我知道这是一个老问题,但我刚刚完成了一个使用Channel API实现发布/订阅模型的开源项目,即您可以让多个用户订阅一个主题,然后所有这些订阅者将当有人向该主题发布消息时会收到通知。如果需要,它还具有一些很好的功能,如自动消息持久性,以及“返回收据”,其中只要OTHER订户收到该消息,就可以通知订户。见https://github.com/adevine/gaewebpubsub#gae-web-pubsub。根据Apache 2.0许可证授权。