netty,tomcat线程模型(netty , tomcat threading model)

我是这方面的新手,如果我的问题对于经验丰富的netty,tomcat用户来说似乎太天真,我很抱歉。

我正在运行一个Netty websocket服务器(使用示例代码并在端口8090上运行)通过tomcat中的spring配置(在端口8080上运行)。 我试图了解两者的线程模型以及整体如何工作。

据我所知,tomcat by deafult设置maxThreads = 200 (最大活动线程数)。 虽然netty使用boss线程来创建和连接/绑定套接字,然后将它们传递给工作线程,后者执行实际的异步I / O.

现在我想了解:

  • 如果Netty使用的线程将从tomcat池获取,从而减少活动线程的数量)?

  • 对于每个websocket连接,将分配和使用一个单独的线程(我不是很清楚websocket实现,但我认为答案应该是否定的)。

  • 总的来说,它会如何影响连接到webapp和websocket服务器的并发客户端数量?

编辑:

因此在编写weboscket服务器时应该记住哪些具体要点?


I am a newbie to this and I am sorry if my question may seem to be too naive to experienced netty , tomcat users.

I am running a Netty websocket server(using the sample code and running on port 8090) configured through spring inside tomcat(running on port 8080). I am trying to understand the threading models of both and overall how would it work.

As I understand, tomcat by deafult sets the maxThreads = 200 (max number of active threads). While netty uses boss threads to create and connect/bind sockets and then pass them off to the worker threads , which do the actual asynchronous I/O.

Now I am trying to understand :

  • If the threads used by Netty would be taken from the tomcat pool and hence decrease the number of active threads) ?

  • For each websocket connection would a separate thread be allocated and used (I am not very clear about websocket implementation, though I think the answer to this should be no).

  • Overall , how would it affect the number of simultaneous clients connecting to the webapp and the websocket server?

EDIT :

And accordingly are there any specific points that should be kept in mind while coding the weboscket server ?


原文:https://stackoverflow.com/questions/11464430
2021-06-21 06:06

满意答案

在Netty中,通过将Executor传递给构造函数来指定ThreadPool。 因此,只要您不使用与Tomcat中使用的池相同的池,它就不会影响可用的线程。

Netty的Webseocket实现可以与其NIO传输一起使用。 在这种情况下,您将在连接之间共享许多线程。 因此,从连接到线程没有1:1的映射。


In Netty you specify the ThreadPool by pass an Executor to the constructor. So as long as you don't use the same pool as you use in Tomcat it should not effect the avaible threads.

Netty's Webseocket implementation can be used with its NIO transport. In this case you would share a number of threads between connections. So there is not 1:1 mapping from connection to threads.

相关问答

更多

D-Bus线程模型(D-Bus threading model)

作为一种协议,D-Bus并不涉及线程。 D-Bus连接按顺序接收消息。 在协议级别,对消息的回复是异步的:即发送者在发送更多消息之前不必等待回复。 虽然原则上D-Bus实现可以同时将消息分派给服务实现,但我不知道有这样做。 通常情况下,如果您愿意,D-Bus实现(或“绑定”)允许服务为每个方法(甚至每个方法调用)决定是否同步或异步地响应传入的方法调用。 这些细节取决于你正在使用的特定实现。 如果你是异步响应方法调用,你的服务实现负责确保任何状态保持一致,同时有多个响应正在等待。 如果你总是同步响应...

线程模型(Threading Model)

听起来你正在寻找一个线程池。 这里有一篇文章,链接到不同语言的特定实现(在底部的外部链接中)。 编辑: 这是一个C ++的例子。 Sounds like you are looking for a Thread pool. Here is an article with links to specific implementations in different languages (in the external links at the bottom). EDIT: Here is a C++...

为什么COM +会忽略公寓线程模型?(Why does COM+ ignore the apartment threading model?)

为避免混淆,我不会在这个答案中使用术语“对象”。 相反,让我们使用“类”和“实例”。 我相信我们都明白他们之间的区别。 使用ThreadingModel“Apartment”标记您的COM类意味着它的实例将被加载到STA中。 创建这些实例的过程将确定它们是进入同一STA还是进入单独的STA。 正如您所发现的,COM +已将多个实例加载到单独的STA中。 使用STA获得的保证是多个线程永远不会同时访问单个实例。 如果将同一类的单独实例加载到单独的STA中,则它们当然可以由不同的线程同时访问。 因此,...

Tomcat 8.5线程模型(Tomcat 8.5 threading model)

当有数据要处理时,从池中分配一个线程来处理WebSocket连接上的传入数据。 一旦完成,线程返回到池。 有可能(事实上)每次都会使用不同的线程。 传出消息将使用阻塞或非阻塞IO,具体取决于使用哪个API部分。 JDBC调用通常会阻塞,但由JDBC驱动程序控制。 应用程序如何处理JDBC调用,并且WebSocket消息的关系(如果有的话)取决于应用程序。 A thread is allocated from the pool to process incoming data on a WebSoc...

boost线程库的模型是什么?(What is the model of boost threading library)

它是本地线程,即它将使用平台线程,至少在Linux,Windows和Mac中。 据我所知,线程映射将与Windows,Linux和MAC中的每个派生线程的内核线程为1:1。 我不确定其他平台是否可以用其他方式实现,但我不知道使用boost.thread API实现任何非内核线程实现。 对于用户级别的“线程”,通过协作式多任务处理,可以使用boost.coroutine。 还有即将推出的boost.fiber库,它与boost.coroutine几乎相同,但它增加了一个用户级的“线程”(这是库中术语...

ViewModel中Model + Threading中的ObservableCollection(ObservableCollection in Model + Threading in ViewModel)

我假设你正在使用wpf或silverlight。 您可以像在单个线程上一样挂钩事件,但将它们封送回Dispatcher对象(Invoke())。 假设您的可观察集合是线程安全的,那么您应该没有问题。 I am assuming you are using either wpf or silverlight. You hook the events the same as you would on a single thread, but marshal them back onto the Dis...

netty,tomcat线程模型(netty , tomcat threading model)

在Netty中,通过将Executor传递给构造函数来指定ThreadPool。 因此,只要您不使用与Tomcat中使用的池相同的池,它就不会影响可用的线程。 Netty的Webseocket实现可以与其NIO传输一起使用。 在这种情况下,您将在连接之间共享许多线程。 因此,从连接到线程没有1:1的映射。 In Netty you specify the ThreadPool by pass an Executor to the constructor. So as long as you don...

线程模型和AKKA(Threading model and AKKA)

java.util.concurrent.ThreadFactory创建Deamon或非Deamon类型的线程。 默认情况下, ExecutionContext.global使用ForkJoinPool和生成守护程序线程的线程工厂。 在akka配置中有akka.daemonic属性,默认情况下是off的(在reference.conf )。 在为默认调度程序和调度程序创建默认线程工厂时使用此标志。 最佳文档是Akka和Scala库的源代码。 我有类似的问题,没有关闭Tomcat容器中的Spray应...

Java Tomcat,底层Netty线程没有停止(Java Tomcat, underlying Netty threads not stopped)

看起来你有一个ClassLoader问题 引起:java.lang.ClassNotFoundException:非法访问:此Web应用程序实例已经停止。 无法加载[io.netty.buffer.PoolArena $ 1]。 抛出以下堆栈跟踪以进行调试以及尝试终止导致非法访问的线程。 在org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:134...

相关文章

更多

[Netty 1] 初识Netty

1. 简介 最早接触netty是在阅读Zookeeper源码的时候,后来看到Storm的消息传输层也由 ...

Tomcat介绍

先给tomcat添加一个用户

tomcat + solr

1、解压solr [root@svn-server tmp]tar -zxvf solr-4.7.0 ...

tomcat线程一直处于RUNNABLE,不接受请求

最近项目中一个模块出现一个问题,本人做的比较浅显,所以很简单的问题一直搞了好几天,通过各种查资料、工具 ...

Tomcat的部署web项目

直接将web项目文件件拷贝到webapps 目录中Tomcat的Webapps目录是Tomcat默认的 ...

Linux下监控Tomcat

系统是两个tomcat 做的负载均衡,最近经常由于JMagick 处理大量图片导致内存溢出,tomca ...

tomcat directories.

/etc/tomcat6/ /etc/tomcat6/├── Catalina│ └── local ...

linux下杀tomcat脚本

#kill tomcat pidUSER=`whoami`pidlist=`ps -ef|grep t ...

Loadrunner实现对tomcat的监控

对公司的基于tomcat搭建的solr索引服务器进行性能测试时,需要跟踪其tomcat的各项性能指标, ...

tomcat配置域名的问题

第一次配tomcat域名 我现在有个问题 假如我有个域名是www.xxx.com 现在 1.把 ...

最新问答

更多

java中的Base64二进制数据类型(Base64 binary data type in java)

Base-64编码是一种将任意字节转换为适合ASCII编码的文本字符范围内的字节的方法。 这是在没有任何解释的情况下完成的 - 原始字节在发送者端被转换为base-64; 接收器将它们转换回字节流,这就是它的全部内容。 当您的代码打印encoded1.getClass().getName() ,它获取的只是字节数组的静态类型。 为了将base-64中编码的数据解释为对程序有意义的内容,您需要知道作为base-64传输的基础数据的格式。 一旦字节传递给你(在你的情况下,这是encoded1的1字节

SQL Select Distinct基于条件(SQL Select Distinct based on Conditional)

你可以试试这个, SELECT ASN, CASE WHEN MAX_STATUS = 2 THEN 'MISCOUNT' WHEN MAX_STATUS = 0 THEN 'NOT STARTED' WHEN MAX_STATUS = 1 AND MIN_STATUS = 1 THEN 'VERIFIED' WHEN MAX_STATUS = 1 AND MIN_STATUS = 0 THEN 'I

带有Category和SubCategory的嵌套类别表(Nested Category table with Category and SubCategory)

检查公用表表达式,这些表达式允许您创建“递归选择”。 http://www.mssqltips.com/sqlservertip/1520/recursive-queries-using-common-table-expressions-cte-in-sql-server/ Check for Common Table Expressions, those allow you to create "recursive-selects". http://www.mssqltips.com/sqls

我的应用程序中有两个http请求,但我只想使用一个'http_proxy'(I have two http requests in my application, but I want only one use 'http_proxy')

我的解决方案是改变lib。 我正在使用SOAPpy,现在我正在使用SUDS并且工作。 由于某种原因,SOAPpy中的param http_proxy错误地使用了代理。 My solution was to change the lib. I was using SOAPpy, now Im using SUDS and worked. For some reason the param http_proxy in SOAPpy was using the proxy incorrectly.

记录样本的GNU无线电文件格式(GNU Radio File Format for the recorded samples)

文件接收器只是数据流的转储。 如果数据流内容是简单字节,那么文件的内容很简单。 如果数据流包含复数,则该文件将包含复数列表,其中每个复数由两个浮点数给出,每个浮点数(通常)为4个字节。 有关gnuradio文件读写块的实现,请参阅文件gnuradio / gnuradio-core / src / lib / io / gr_file_sink.cc和gr_file_source.cc。 您还可以使用python和gnuradio将文件转换为其他格式。 from gnuradio import

在Windows下的package.json脚本中设置环境变量(Setting environment variables in package.json scripts under Windows)

我设法解决了这个问题,有趣的是,删除了空间: "buildDev": "set NODE_ENV=development&& webpack" 哪个(至少对我来说)似乎是错的。 我预计这将导致语法错误和development&&的NODE_ENV值,但它完美地工作 - 尽管是丑陋的。 Make it cross-platform by using cross-env: "buildDev": "cross-env NODE_ENV=development webpack"

无法使用Renderer将Object实例设置为JComboBox的选定项(Unable to set Object instance as selected item of JComboBox with Renderer)

如果要通过使用对象的不同实例来执行此操作,但具有相同的属性,则需要覆盖类的equals和hashcode方法,以便属性组合是唯一的。 这非常重要,这是一种关系期望,任何equal另一个的对象都将具有相同的hashcode 这是一个非常快速的示例,我使用IDE的自动生成过程(因为我很懒),但是,如果您的Registration类具有在与类的实例进行比较时应该考虑的其他属性,则需要将其修改为支持他们(再次,任何好的IDE都应该能够做到这一点) public class Registration {

在表单提交上,在Codeiginiter验证之前首先进行jquery检查(On Form Submission, do jquery checking first before Codeiginiter validation)

如果您想在提交表单之前在客户端进行验证,则以下内容将起作用: // view echo form_open('basic_controller/submission'); echo form_input( array('name'=>'text', 'id'=>'text_input') ); echo form_submit('my_submit', 'Enter', "id='my_submit'"); echo form_close(); // controller function s

返回然后作为未定义。(Returning Then as Undefined. Q in NodeJS)

您的主要功能landingPage没有返回值。 其中的代码产生一个承诺,但你也应该返回它。 当你想要返回deferred持有的promise时,你应该延迟一个在外部函数作用域中定义的变量,这样你就可以返回它定义的promise( deferred.promise ): var landingPage = function (dir) { var deferred = Q.defer(); // *** define here Uni.get('https://'+getDirec

在同一个类中调用方法(Calling a method within the same class)

这不是一种扩展方法。 你需要使方法静态并调用它们: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication4 { class arraymod { static void Main( string[] args ) { int[]