【问题标题】:Thread-per-request tcp server每个请求的线程 tcp 服务器
【发布时间】:2013-08-18 16:01:45
【问题描述】:

我只是想了解如何用 Java 编写一个每个请求线程的 TCP 服务器。 我已经编写了一个每个连接线程的服务器,它运行 serverSocket.accept() 并在每次新连接进入时创建一个新线程。

如何将其修改为每个请求线程的服务器? 我想传入的连接可以放入某种队列,但你怎么知道哪个已经发出请求并准备好服务?

我怀疑这里需要 NIO,但不确定。

谢谢。

[编辑]

要明确 - 原始的“服务器”只是我编写的一个循环,它等待连接,然后将其传递给新线程。

讲师提到了“每个请求线程”架构,我想知道它是如何“在幕后”工作的。

我对它如何工作的第一个想法可能是完全错误的。

【问题讨论】:

  • 您没有提供足够的信息。究竟如何将您的原始服务器修改为每个请求线程的服务器是无法回答的,因为我们不知道您的原始服务器是如何实现的或它的性质是什么。据我们所知,这只是在某处的配置文件中将“每个连接”更改为“每个请求”的问题。请显示您的代码,描述您遇到的问题,预期和实际结果,以及您采取的步骤尝试解决它。​​
  • 我也不确定你为什么认为 NIO 是相关的;在尝试猜测应该使用哪些工具之前,您需要弄清楚要做什么
  • 为什么?你希望得到什么好处?每个连接一次如何获得多个请求?问题真的没有意义。
  • 服务器只是我自己编写的一个循环,它接受一个连接并将其交给一个新线程。为什么我要尝试为每个请求创建一个线程?学习。
  • 学习什么?真正的服务器不是这样写的。

标签: java multithreading tcp


【解决方案1】:

您可以使用Selector 来实现您的目标。 Here 是一个很好的例子,你可以参考。

【讨论】:

    【解决方案2】:

    您可以使用普通 IO 或阻塞 NIO(或非阻塞 NIO 或异步 NIO2)每个连接可以有多个线程(或共享工作线程池),但除非这些正在等待慢速服务,例如数据库,这可能会更快(如果您想要低延迟,它可能会慢得多)

    【讨论】:

    • 感谢您的回答。您能解释一下如何使用普通 IO 来创建每个请求的线程架构吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多