当前位置: 首页 > 知识库问答 >
问题:

每请求线程tcp服务器

贺飞
2023-03-14

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

如何将其修改为每请求线程服务器?我想传入的连接可以放入某种队列中,但是您如何知道哪个连接发出了请求&准备好了服务呢?

我怀疑NIO在这里是必要的,但不确定。

多谢了。

[编辑]

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

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

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

共有1个答案

袁河
2023-03-14

您可以使用选择器来实现您的目标。这里有一个你可以参考的好例子。

 类似资料:
  • 问题内容: 我使用python的threding模块创建了一个简单的多线程tcp服务器。每次连接新客户端时,该服务器都会创建一个新线程。 然后,我打开了两个新的终端,并使用netcat连接到服务器。然后,当我使用连接的第一个终端输入并向服务器发送第一个数据时,来自服务器的答复将传到另一个终端,并且第一个连接断开。我猜到了原因,但我怀疑是否会发生这种情况,因为 clientsock 变量被覆盖,因此

  • 我尝试分析一个gRPC java服务器。我主要看到下面的一组线程池。 null

  • 问题内容: 在Java中创建FixedThreadPool Executor对象时,您需要传递一个参数,该参数描述Executor可以同时执行的线程数。我正在建立一个服务类,其职责是处理大量电话号码。对于每个电话号码,我需要执行Web服务(这是我的瓶颈),然后将响应保存在哈希图中。 为了使此瓶颈对我的服务性能的危害减少,我决定创建Worker类,该类将获取未处理的元素并对其进行处理。Worker类

  • 在终端上,我得到了这个错误:$./asadmin start-domain domain1 找不到默认的域目录。此系统属性没有值:com.sun.aas.domainsroot命令启动-域失败。 在Eclipse上,我得到了这个运行时异常:在Felix平台上启动GlassFish 玻璃鱼4 拜托,你知道怎么解决这个问题吗?

  • ?> Swoole\Coroutine\Server 是一个完全协程化的类,用于创建协程TCP服务器,支持TCP和unixSocket类型。 与Server模块不同之处: 动态创建销毁,在运行时可以动态监听端口,也可以动态关闭服务器 处理连接的过程是完全同步的,程序可以顺序处理Connect、Receive、Close事件 !> 在4.4以上版本中可用 短命名 可使用Co\Server短名。 方法

  • 程序代码 server.php //创建Server对象,监听 127.0.0.1:9501端口 $serv = new Swoole\Server("127.0.0.1", 9501); //监听连接进入事件 $serv->on('Connect', function ($serv, $fd) { echo "Client: Connect.\n"; }); //监听数据接收事