使用哪种群发消息技术?

时间:2009-02-16 00:18:16

标签: ruby xmpp amqp haxe stomp

我感到有点困惑 - 大约24小时我一直在想我的项目中使用哪种群组广播技术。

基本上,我需要的是:

  • 创建组(通过某些后端进程)
  • 任何客户端广播消息(1:N,N:N)
  • (可能)直接留言(1:1)
  • (重要)使用我自己的后端验证/授权客户端(例如,通过某种HTTP API)
  • 能够通过后端进程(或服务器插件)踢特定客户端

以下是我的内容:

  1. Ruby或Haxe中与后端相关的流程
  2. JS + Haxe(Flash9)的前端 - 在浏览器中,所以理想情况下通过80/443进行通信,但不一定。
  3. 因此,必须在Haxe for Flash中轻松访问此技术,最好是Ruby。

    我一直在考虑:RabbitMQ(或OpenAMQ),RabbitMQ + STOMP,ejabberd,ejabberd + BOSH,juggernaut(需要为它编写一个Haxe lib)。

    有任何想法/建议吗?

5 个答案:

答案 0 :(得分:3)

尤里,

RabbitMQ,Haxe和as3:http://geekrelief.wordpress.com/2008/12/15/hxamqp-amqp-with-haxe/

RabbitMQ,Ruby和ACL:http://pastie.org/pastes/368315

您可能还想看看使用Nanite和RabbitMQ管理后端群组:http://brainspl.at/articles/2008/10/11/merbcamp-keynote-and-introducing-nanite

你说你需要:

* broadcast messages by any client (1:N, N:N)
* (potentially) direct messages (1:1)

您可以使用RabbitMQ轻松完成这两项工作。 RabbitMQ支持两种情况,1:N pubsub和1:1消息传递,具有“直接”交换。

直接交换模式如下:

任何发布者(组成员)都会使用“路由密钥”(例如“yurii”)向代理发送消息。 RabbitMQ将此密钥与路由表(即“交换”)中的订阅绑定相匹配。每个绑定表示队列的订阅,表示对具有给定路由密钥的消息的兴趣。当路由和绑定密钥匹配时,该消息然后被路由到队列以供客户端(组成员)随后使用。这适用于1:N和1:1的情况; N:N建于1:N。

路由模型简介:http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/

一般介绍:http://google-ukdev.blogspot.com/2008/09/rabbitmq-tech-talk-at-google-london.html

您还需要:

* (important) authenticate/authorize clients with my own backend (say, through some kind of HTTP API)

请参阅ACLs代码(上面的链接)。 RabbitMQ还有一个HTTP接口,但我们还没有将HTTP前端与ACL代码结合起来。但这不应该让oyu回归。请来最近讨论这个话题的rabbitmq讨论列表。

您还需要:

* create groups (by some backend process)
* to be able to kick specific clients by backend process (or server plugin)

我建议看看像Nanite和Workling这样的工具如何做到这一点。组创建通常不是消息传递系统的一部分,而是在RabbitMQ中,您使用订阅创建路由模式。您可以通过使用用于将其消费队列绑定到交换的任何密钥向他们发送消息来踢特定客户端。

希望这有帮助!

亚历

答案 1 :(得分:1)

群组通信与简单的消息/排队略有不同。

大多数群组通信系统都是商业性的,但有两种(我知道)开源/免费你可以看看:

但这两个可能很难找到Ruby绑定。 Spread,可能是OpenAIS,将客户端视为可信任,因此基于浏览器的客户端没有意义。您需要让浏览器前端与后端的组客户端进行通信。

答案 2 :(得分:1)

如果你要做Flash开发,你看过SmartfoxServer吗?它拥有您想要的一切,并具有本机Flash客户端库。我用了一个项目来管理成千上万的连接用户。

http://www.smartfoxserver.com/

答案 3 :(得分:1)

我们一直在使用ActiveMQ。我们为人力资源系统供应的供应商正在使用Ruby / ActiveMQ来广播和接收更新。

http://activemq.apache.org/cross-language-clients.html

答案 4 :(得分:0)

支持Stomp协议的其他开源消息代理是OpenMQ,它包含在GlassFish V3和GlassFish 2.1.1中,但也可以独立运行,很快就可以使用JBoss消息代理HornetQ V2.1。 OpenMQ支持对RPC样式通信有用的临时队列,但ActiveMQ也在Stomp适配器中提供了一些有趣的功能。