6

我感到有点困惑——大约 24 小时以来,我一直在考虑在我的项目中使用哪种组广播技术。

基本上,我需要的是:

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

这是我将拥有的:

  1. Ruby 或 Haxe 中的后端相关进程
  2. JS+Haxe(Flash9) 中的前端——在浏览器中,理想情况下通过 80/443 进行通信,但不一定。

因此,这项技术必须在 Haxe for Flash 中易于访问,最好是 Ruby。

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

有什么想法/建议吗?

4

5 回答 5

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)

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

您还需要:

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

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

希望这可以帮助!

亚历克西斯

于 2009-02-16T07:38:21.437 回答
1

小组交流与简单的消息传递/排队稍有不同。

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

不过,这两者可能都很难找到 Ruby 绑定。传播,可能是 OpenAIS,将客户端视为受信任的,因此基于浏览器的客户端没有意义。您需要让浏览器前端与后端的组客户端通信。

于 2009-02-16T00:51:00.293 回答
1

如果你打算做 Flash 开发,你看过 SmartfoxServer 吗?它拥有您想要的一切,并拥有原生 Flash 客户端库。我曾在一个项目中管理过成千上万的连接用户。

http://www.smartfoxserver.com/

于 2009-02-16T01:05:26.047 回答
1

我们一直在使用 ActiveMQ。为我们的 HR 系统提供服务的供应商正在使用 Ruby/ActiveMQ 来广播和接收更新。

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

于 2009-02-16T01:25:14.067 回答
0

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

于 2009-12-16T16:55:39.470 回答