XMPP,WebSocket和其他问题

时间:2013-11-13 09:26:55

标签: android .net websocket xmpp chat

我现在的目标只是制作一款具有WhatsApp功能的Android应用程序(不一定是WhatsApp的克隆版;只是具有类似的,可能不那么好的功能)。我猜重要的是群聊,在线/离线状态以及离线消息。

现在我主要知道有一个WebSocket服务器的可能性(因为我被介绍为一个实时解决方案,可以打开我无限的可能性),我以前测过它 - 看起来不错。但是,我面临以下问题:

  1. 我不知道如何管理在线/离线状态;我必须自己实施吗?如果他的朋友仍然连接,也许Android客户端每30秒查询一次服务器......
  2. 离线消息怎么样?如果未连接特定的人,则将不会传递给他。那么消息是否需要存储在某个地方(比如MSSQL),然后当人登录客户端时会自动检索来自服务器的所有离线消息?
  3. 群聊怎么样?我不确定WebSocket是如何实现的,我是否必须单独实现它?这意味着需要进行大量的商业逻辑(以及出现错误的大量空间)......
  4. 我知道有一个名为XMPP的协议(并且它与WebSocket完全不同),但我不确定它与我的问题有什么关系。 XMPP是我的银弹吗(即那里有 .NET 库可以为我实现大部分库吗?)。我也听说过Comet,但我根本不知道它是如何相关的......

    有很多缺失的部分,我认为实现我的聊天服务器/客户端将是一块蛋糕,但显然不是这样。任何有经验的人都可以给我一些反馈意见吗?

2 个答案:

答案 0 :(得分:4)

您可以而且应该使用WebSocket实现状态和即时消息功能。实际上,即时消息传递是WebSocket世界的“Hello world”示例。

此外,WebSocket标准旨在支持更高级别,更丰富的业务协议(具有讽刺意味的是标准调用子协议)。 XMPP是这样的协议之一,并且有几个实现具有您正在寻找的确切功能。

如果您想尝试一下,Kaazing(我工作的公司)有free download可用。它包含一个开源XMPP服务器(OpenFire),以及预先配置的Kaazing WebSocket Gateway的XMPP版本。 Kaazing所做的是它通过WebSocket将XMPP协议扩展到Web客户端。它是透明的,因此从XMPP服务器的角度来看,您的(浏览器)客户端只是另一个XMPP客户端。

另一个很好的资源是The Definitive Guide to HTML5 WebSocket的第4章(我是其中的共同作者),标题为Building Instant Messaging and Chat over WebSocket with XMPP。本书还附带一个free downloadable VM,其中包含预先安装并配置用于测试的开源软件。 VM的Here you can see detailed screencasts - 获得一个想法。

希望这有帮助。

答案 1 :(得分:3)

让我们按照部分进行:

首先:不要使用套接字。这意味着您需要在每个客户端设备上始终保持服务运行并保持连接。那会像疯了一样耗尽电池,没有人会用它。这些应用程序中的每一个应用程序包括WhatsApp,Hangout,Gmail,Facebook messenger都是Google云消息传递(GCM)http://developer.android.com/google/gcm/index.html服务。

  1. 也许您想要在发生这些状态时通过GCM发送状态更改,或者一旦用户进入朋友列表屏幕,您就会对状态进行一次性查询,这里重要的是您不会在移动设备中每30秒查询一次。

  2. 是的,如果设备未连接,则服务器必须执行此操作。而且我不相信你会使用SQL,由于可扩展性,许多公司现在正在做的是没有SQL方法,但这不是我的专业知识。

  3. 我不确定你在这里问的是什么。您将如何将数据与应用程序处理数据的方式混合在一起。这是两个完全不同的东西,学习差异。例如,有人可以创建一个群组聊天,通过UDP上的WiFi-Direct工作( HOW 数据将被发送),但你对这些数据的处理无关紧要,它可能已通过蓝牙到达这对于解析器/解释器来说是相同的。这只是数据。

  4. 祝你好运。