【问题标题】:Java handling multiple clients - multithreading?Java处理多个客户端 - 多线程?
【发布时间】:2013-11-29 22:20:35
【问题描述】:

我对制作一个可以接受和处理来自多个连接的客户端的 I/O 的应用程序非常感兴趣。

有人告诉我,为了提高性能,我需要为此使用两个线程。

线程 1

接受连接

线程 2

处理客户端 I/O 和响应

我看过什么是线程,我确实使用过它,但我不确定如何将我的程序(没有,只是说)分成两个线程。

我该怎么做?

其中一个线程应该有它自己的类? 我不知道我可以申请一个好的设计,所以我可以更好地理解它。

我该怎么做?你能举个小例子吗?

【问题讨论】:

    标签: java multithreading sockets networking


    【解决方案1】:

    Here's an example 提供完整的教程,希望对您有所帮助。请注意您是如何拥有一个线程(主线程,从一开始就),并且每次收到连接时,都会产生一个 KKMultiServerThread 类型的新线程。

    一旦您熟悉了这一点,请考虑使用Thread Pool,而不是仅在连接开始时创建新线程。

    享受 Java!

    【讨论】:

    • 那么你想为每个连接创建一个新线程吗?如果我有 200 个以上的连接怎么办?这对我来说不是很好
    • 好吧,你确实想为 200 个客户提供服务,所以你需要 200 个线程。您可以使用线程池稍微优化响应时间,但除此之外,您别无选择。不过,也许其他人想出了一个更好的主意。
    • 在 C# 聊天中,他们告诉我创建一个处理连接的线程和一个处理所有用户的线程。他这么说是不是因为 c# 不一样?
    • @JonyKale 这个 SO stackoverflow.com/questions/763579/… 表明现代 VM 支持数千个线程。在这样的规模(数千个客户端)上,主要瓶颈将是您的处理逻辑,因此无论如何您都需要服务器集群。如果您不想要太多线程,则可以使用 IO 多路复用(每个客户端少于一个线程)。在 Java 中,这在 java.nio 包中可用。
    • 目前公众的理解是传统模型thread-per-client具有相同(或更好)的吞吐量,同时更易于实现:mailinator.blogspot.ru/2008/02/…
    猜你喜欢
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多