6

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

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

  1. 我不知道如何管理在线/离线状态;我必须自己实施吗?如果他的朋友仍然连接,也许 Android 客户端每 30 秒查询一次服务器......
  2. 离线消息如何?如果某个特定的人未连接,则消息将不会传递给他。消息是否需要存储在某个地方(比如 MSSQL),然后当用户登录时,客户端会自动从服务器检索所有离线消息?
  3. 群聊呢?我不确定 WebSocket 是如何实现的,我是否也必须单独实现它?这将意味着需要处理大量的商业逻辑(以及大量出现错误的空间)......

我知道有一个名为 XMPP 的协议(它与 WebSocket 完全不同),但我不确定它与我的问题有何关系。XMPP 是我的灵丹妙药吗(即是否有.NET库可以为我实现其中的大部分功能?)。我也听说过彗星,但我根本不知道它是什么关系......

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

4

2 回答 2

4

You can and should be using WebSocket for presence and instant messaging functionality. In fact, instant messaging is the "Hello world" example of the WebSocket world.

Also, the WebSocket standard was designed to support higher level, richer business protocols (which ironically the standard calls sub-protocols). XMPP is one of such protocols, and there are several implementations out there with the exact features you're looking for.

If you'd like to try it out, Kaazing (the company I work for) has a free download available. It contains an open source XMPP server (OpenFire), along with the XMPP edition of a pre-configured Kaazing WebSocket Gateway. What Kaazing does is it extends the XMPP protocol to Web clients over WebSocket. It does so transparently, so from the XMPP server's perspective your (browser) client is just another XMPP client.

Another good resource is chapter 4 of The Definitive Guide to HTML5 WebSocket (of which I'm a co-author), titled Building Instant Messaging and Chat over WebSocket with XMPP. The book also comes with a free downloadable VM with open source software pre-installed and configured for your testing. Here you can see detailed screencasts of the VM - to get an idea.

Hope this helps.

于 2013-11-14T02:32:09.000 回答
3

让我们每个部分:

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

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

  2. 是的,如果设备未连接,您的服务器必须做这些事情。而且我不相信你会使用 SQL,由于可扩展性,现在很多公司正在做的是 noSQL 方法,但这不是我的专长。

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

祝你好运。

于 2013-11-13T09:39:48.053 回答