Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改Jetty WebSocketListener线程名称_Jetty_Jetty 9 - Fatal编程技术网

更改Jetty WebSocketListener线程名称

更改Jetty WebSocketListener线程名称,jetty,jetty-9,Jetty,Jetty 9,如何指定ThreadFactory来更改调用WebSocketListener的回调(onWebSocketConnect和onWebSocketText)的线程名称 线程名称将是在创建服务器对象之前已知的固定名称 我尝试了以下方法,但不幸的是没有成功 jettyServer=新服务器(新名称dQueuedThreadPool(“MyThreadNamePrefix”); 导入org.eclipse.jetty.util.thread.QueuedThreadPool; 类NamedQueued

如何指定
ThreadFactory
来更改调用
WebSocketListener
的回调(
onWebSocketConnect
onWebSocketText
)的线程名称

线程名称将是在创建服务器对象之前已知的固定名称

我尝试了以下方法,但不幸的是没有成功

jettyServer=新服务器(新名称dQueuedThreadPool(“MyThreadNamePrefix”);
导入org.eclipse.jetty.util.thread.QueuedThreadPool;
类NamedQueuedThreadPool扩展了QueuedThreadPool{
私有最终字符串threadName;
public NamedQueuedThreadPool(最终字符串threadName){
this.threadName=threadName;
}
@凌驾
受保护线程newThread(最终可运行可运行){
线程t=super.newThread(可运行);
t、 setName(threadName);
返回t;
}
}
我仍然看到线程名称,如:
qtp1692017180-191
(我猜它代表排队线程池)

我使用的是
jetty-server-9.2.9

编辑: 对我来说,它不关心哪个线程执行特定的客户机请求,我只希望所有线程都有相同的名称,我可以在某处选择

例如,我会在所有线程的线程名前加上“Adapter/SomeInstanceId”,这会写入日志,并为我提供一种方便的筛选/分组方法。

Jetty中的java和它使用的java最终控制线程名,它们只与线程池本身相关

此外,WebSocket的生存期意味着该WebSocket可以有许多不同的线程处于活动状态。因此,设置名称并期望其粘附到特定的WebSocket端点实例是非常不可能的

如果WebSocket空闲的时间足够长(以毫秒为单位),那么线程将返回池中,供Jetty服务器上的其他资源使用

一旦有需要(比如WebSocket写入或WebSocket端点有一些内容要读取),就从ThreadPool获取一个新线程来处理这个新活动

Jetty中的
ThreadPool
也可以用于许多事情,与特定
ServerConnector
端点的处理无关。在某些情况下,当
ServerConnector
和端点不再存在时,还需要线程来处理WebSocket的关闭通知。没有适配器,没有网络任何东西,例如tc

如果你想过滤日志,不要通过线程名,使用一个合适的日志框架,比如,并在日志本身上设置一些其他类型的过滤。(你甚至可以从所有日志框架将它们路由到一个日志文件)

一些选择:

  • 使用属性。
    • 在WebApp初始化时设置,以在日志记录事件中包含WebApp详细信息
    • 在上设置,以在日志记录事件中包括连接详细信息
    • 在请求处理期间通过自定义MDC筛选器进行设置,以包括请求详细信息(如请求路径、用户代理、客户端远程ip、用户名等)
  • ,将所有内容路由到服务器端日志记录,然后或使用自定义
    模式
    条目指示所需的详细信息
  • 甚至是上述的一些组合,以满足您的需要

简而言之,如果您的最终目标是将日志事件关联在一起,或者日志搜索,或者日志排序,或者通常与日志有关,那么不要通过线程名称来实现(这是错误的方法)

我知道套接字不绑定到单个线程。我只希望池中的所有线程都具有相同的名称,我可以在某个地方指定一次。我不明白Jetty为什么不使用我在服务器的ctor中提供的线程池实现。(或者它会在内部覆盖该名称??我不知道)更新答案以解决您的核心问题(即:线程名称操纵是错误的方法)