我正在尝试设计一个针对3lac的目标用户的移动聊天应用程序,我看过与XMPP服务器和客户端方法有关的文章,node.js与socket.io有关,但是混乱是为了扩展这么多用户。
对于这么多用户来说,使用java socket api也可以实现这一点。
答案 0 :(得分:2)
与具有相关语言的开发人员的技能以及解决方案的设计相比,实现语言对解决方案的可伸缩性几乎没有影响。
处理聊天程序时的两个主要扩展挑战是1)C10K problem和2)在社交图中缩放实时通知,即O(numPeople*numPeopleSubscribedToPerson*numDevicesPerPerson*rateOfInteractions)
。
研究facebook,twitter和gmail设计将帮助您了解扩展消息增长率以及如何为Web解决方案建模的问题(提示:使用推送/长轮询Web技术并支持异步解决方案而非阻止同步一个是要走的路)。
此链接是一个良好的开端How does facebook, gmail send the real time notification?,Varnish记录了他们对C10K问题的解决方案here。
就Java套接字而言,它们很好。然而常见的问题是线程处理。避免为每个插槽分配一个线程。这将影响大约1-10k用户的扩展问题,具体取决于一些因素,包括操作系统配置。使用Java时,请使用Java NIO并确保线程使用率不会随着登录到服务器的用户数量而增长。
像node.js这样的语言的优势在于它们从一开始就提倡这些最佳实践,其中良好的异步技术在Java世界的游戏中已经很晚了。但他们确实存在。