目前我正在制作一个聊天程序(在java中为那些想知道的人)而且我正处于需要为整个事情提出一个好的架构的地方。这是我目前的大纲,但随时提供任何反馈(我没有专业培训,只是一些阅读)。
生命周期如下:
似乎客户端只需要是单线程的。此外,如果您考虑到许多IM类型程序具有的任何有用(主要)功能,请分享它们。我很高兴听到(如果你想让我非常开心,那么你也可以包括实施的大纲:)。
现在这里变得相当混乱。我认为我正在创建比我需要的更多线程。让我解释一下。
目前关于聊天看起来像服务器端的想法:
就是这样。现在,当然还有像我没有包含的图形和诸如此类的东西。此外,凭借我在Java中所拥有的,我应该能够在两个以上的人之间进行对话。尽管如此,这似乎是我使用了过多的线程。有主线程,每个用户一个线程,每个对话一个线程。这意味着有1000个用户聊天,我已经启动了1501个新线程。这太过分吗?我可以使用某种类型的线程池吗?您有什么其他建议吗?如果我错过任何东西,只要问(如果它是我没有想到的东西那么我也会这么说)。最后,如果您对该计划的实际功能有任何想法,我会很高兴听到。
答案 0 :(得分:1)
每个会话的一个主题或所有会话的一个主题都不会扩展。你需要介于两者之间。
对于为对话收到的每条消息,使用具有一定最大允许线程数的线程池,将消息处理排队到线程池。
只要有可用的线程(即,您没有太多消息要立即处理),就应该立即处理该消息。
如果要处理的消息多于池中的线程,则处理某些消息会有延迟。虽然这并不理想,但评论说聊天程序需要相当低的处理/带宽,但管理线程池的最大大小意味着你不会破坏处理器或耗尽内存。非常适合扩展解决方案。
随着硬件大小的增加,并发线程的数量会增加,但这听起来不像是一个问题。
答案 1 :(得分:0)
我建议你使用www.netty.io。 有一些教程来开发聊天客户端/服务器: http://www.allreadable.com/6b8c8U4g