【问题标题】:Which group messaging technology to use?使用哪种群消息技术?
【发布时间】:2010-10-07 19:18:18
【问题描述】:

我感到有点困惑——大约 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 库)。

有什么想法/建议吗?

【问题讨论】:

    标签: ruby xmpp amqp haxe stomp


    【解决方案1】:

    尤里,

    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 中,您使用订阅创建路由模式。您可以通过使用他们用来将其消费队列绑定到交换器的任何键向他们发送消息来踢特定客户端。

    希望这会有所帮助!

    亚历克斯

    【讨论】:

      【解决方案2】:

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

      http://www.smartfoxserver.com/

      【讨论】:

      • 虽然看起来很有趣
      • 您可以使用 Actionscript、Python 或 Java 编写后端脚本,但它看起来没有 JRuby 绑定。
      【解决方案3】:

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

      大多数团体通信系统都是商业的,但有两个(据我所知)开源/免费,您可以看看:

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

      【讨论】:

      • 是的,我知道Spread,几年前我为它开发了一个Objective Caml绑定......看起来Spread 4.0已经发布了,什么,大约3年前?无论如何,谢谢:)
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2011-01-17
          • 2016-12-16
          • 2011-03-26
          • 2013-10-16
          • 2010-09-12
          • 1970-01-01
          • 1970-01-01
          • 2013-02-01
          • 1970-01-01
          相关资源
          最近更新 更多