2010-05-25 101 views
4

参照this question,提及XMPP作为IM互操作性的开放标准。运行定制XMPP服务器应用程序有多容易?

对于我的应用程序来说,如果我使用XMPP进行内部客户端 - 服务器通信,或者开发自己的内部协议,但在服务器上使用XMPP以允许与其他服务器进行通信,那么以后将有大的选择。我的直觉是后者会更容易,也许我高估了采取现有的Jabber服务器或XMPP服务器库并构建自定义服务器应用程序的工作量?

如果我的客户端将总是与我的服务器通话,从来没有直接与其他服务器通信,是否使用XMPP合理或过度使用?

说我想拥有自己的DB用户,消息,组和自定义数据。实际上涉及到使用XMPP进行设置,以便我可以自由地将数据发送到服务器,并让我的自定义服务器逻辑处理它?那里的任何库允许我运行一个'骨架'XMPP服务器,在那里我提供了我自己的处理程序,这些处理程序在收到消息时被调用,等等。

我得到了XMPP的总体思路,但是在实际开始的时候我有点失落,甚至在区分是否需要Jabber服务器应用程序或其中一个开源服务器库周围。

还有许可问题。我当然不打算开源主代码库,如果我要使用GPL XMPP解决方案进行客户端 - 服务器通信,我的理解是我很难努力不让自己的代码与GPL“污染”。

+0

我按照前面建议的方式设置OpenFire来测试XMPP。这很容易。正如我记得你可以设置或从少数支持商店中选择。我很确定你可以在很多地方连接到服务器。它和许多其他的也是开源的,所以... – kenny 2010-05-29 02:02:10

回答

1

如果你真的想要XMPP,Openfire将是最容易设置的http://www.igniterealtime.org/projects/openfire/之一,如果你使用Java例如,我也会看看BlazeDS。

+0

你可以符合“如果你真的需要XMPP”吗?如果我的客户不需要直接与另一台服务器通话,那么您是否暗示了使用XMPP而不是我自己的协议是不明智的决定? – 2010-05-25 12:51:44

+0

带独立服务器的IMHO XMPP并不完全是我用来在客户端和服务器之间获取和发布数据的东西。我相信定制,调整和保护特定设置,然后来回推送文本信息会更容易。在Java中,我会使用BlazeDS或Atmosphere。如果你用你正在使用的技术来标记你的问题,我肯定有些人可以为你的案例提供一些常用的设置。 示例:Flex/Flash + Coldfusion或Java + BlazeDS将为您提供使用AMF协议的机会,二进制,快速,您可以发送对象而不是浪费时间序列化和反序列化它们。 – 2010-05-25 19:21:47

+0

所以你实质上是在推荐一个定制的客户端 - 服务器通信层,或者为每个客户端技术量身定制的层,比如套接字或者远程对象或者AJAx等等。 – 2010-05-27 00:01:43

2

很容易,如果你是在linux下

sudo apt-get install ejabberd 

,那么你可以点你的首选IM客户端为localhost:5222,你就完成了。 当然,如果你想要一个域名等,需要更多配置/安装的东西,但我认为这不是你要求的。

注:还有一个Windows版本ejabberd,http://www.process-one.net/en/ejabberd/downloads

1

你可以写一个XMPP服务器组件。这将与任何实现XEP 0114的XMPP服务器一起使用。所有主要的XMPP服务器实现都是这样做的。

如果您有component.localhost.localdomain XMPP服务器组件,并在服务器上运行localhost.localdomain,然后服务器收到发来的任何用户在任何component.localhost.localdomain消息将立即被传递到服务器组件。无论你想要什么,你都可以使用它(例如处理,存储在数据库中等)。回复会再次通过XMPP服务器发送给原​​始发件人,因此组件不必处理服务器任务。

Ruby库xmpp4rblather都使得在Ruby中编写服务器组件非常容易。

与服务器插件相比,XMPP服务器组件的一大优势在于,它们在服务器代码中通过标准化接口(如XEP 0114中定义的)进行通信时独立于服务器代码。缺点是组件无法访问服务器内部的数据结构,这可能是也可能不是依赖于应用程序的问题。

但是,如果您从未真正想让自己的应用程序与其他服务器进行通信,那么使用XMPP并没有多大意义。

相关问题