我现在的目标只是制作一款具有WhatsApp功能的Android应用程序(不一定是WhatsApp的克隆版;只是具有类似的,可能不那么好的功能)。我猜重要的是群聊,在线/离线状态以及离线消息。
现在我主要知道有一个WebSocket服务器的可能性(因为我被介绍为一个实时解决方案,可以打开我无限的可能性),我以前测过它 - 看起来不错。但是,我面临以下问题:
我知道有一个名为XMPP的协议(并且它与WebSocket完全不同),但我不确定它与我的问题有什么关系。 XMPP是我的银弹吗(即那里有 .NET 库可以为我实现大部分库吗?)。我也听说过Comet,但我根本不知道它是如何相关的......
有很多缺失的部分,我认为实现我的聊天服务器/客户端将是一块蛋糕,但显然不是这样。任何有经验的人都可以给我一些反馈意见吗?
答案 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服务。
也许您想要在发生这些状态时通过GCM发送状态更改,或者一旦用户进入朋友列表屏幕,您就会对状态进行一次性查询,这里重要的是您不会在移动设备中每30秒查询一次。
是的,如果设备未连接,则服务器必须执行此操作。而且我不相信你会使用SQL,由于可扩展性,许多公司现在正在做的是没有SQL方法,但这不是我的专业知识。
我不确定你在这里问的是什么。您将如何将数据与应用程序处理数据的方式混合在一起。这是两个完全不同的东西,学习差异。例如,有人可以创建一个群组聊天,通过UDP上的WiFi-Direct工作( HOW 数据将被发送),但你对这些数据的处理无关紧要,它可能已通过蓝牙到达这对于解析器/解释器来说是相同的。这只是数据。