Websocket 确定码头将打开的最大腹板闸门
我正试图找出如何获得jetty允许打开的最大数量的WebSocket。从我的笔记本电脑chrome上看,它的峰值似乎是254。我正试图确定这是铬限制还是码头限制或其他什么Websocket 确定码头将打开的最大腹板闸门,websocket,jetty,Websocket,Jetty,我正试图找出如何获得jetty允许打开的最大数量的WebSocket。从我的笔记本电脑chrome上看,它的峰值似乎是254。我正试图确定这是铬限制还是码头限制或其他什么 package jetty; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.websocket.server.WebSocketHandler; import org.eclipse.jetty.websocket.servlet.WebSo
package jetty;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.websocket.server.WebSocketHandler;
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
public class WebSocketTest {
public static void main(String[] args) throws Exception {
Server server = new Server(8383);
WebSocketHandler wsHandler = new WebSocketHandler() {
@Override
public void configure(WebSocketServletFactory factory) {
factory.getPolicy().setIdleTimeout(-1);
factory.register(MyWebSocketHandler.class);
}
};
server.setHandler(wsHandler);
server.start();
server.join();
}
}
这取决于
ThreadPool
配置
默认情况下,服务器以一个QueuedThreadPool
启动,最多200个线程
注意:线程池中的线程数和WebSocket数之间没有1:1的关系。如果您有空闲的WebSocket,那么线程将返回池供其他活动WebSocket使用
从200 max threadThreadPool
configuration提供40000个活动WebSocket非常容易(如果您有低活动性websocket连接。您使用Jetty的本机websocket实现,而不是javax.websocket实现。您不使用基于对象/流/流的消息处理,而是使用普通的字符串/字节缓冲消息。立即从onMessage dispatch返回,不要启动自己的线程。等等)
有关调整线程池上线程大小的更多信息,请参阅
创建线程池
,然后将其传递到服务器
构造函数中,如下所示
ThreadPool ThreadPool=new QueuedThreadPool(400);
服务器=新服务器(线程池);
ServerConnector http=新的ServerConnector(服务器);
http.setPort(8080);
addConnector(http);
Hi,有没有办法验证和检查这一点?就像任何jetty代码片段或其设计文档显示连接数未链接到服务器的QTP一样?想知道如何在同一连接上维护从连接器到处理程序的请求顺序。(这应该是WebSocket的保证)。一旦http请求通过http升级到websocket,它就不再依赖于处理程序的http行为。连接数在这里是一个没有意义的度量,请关注活动连接数(有流量的连接数),因为Jetty中的所有线程和nio处理都是这样工作的(仅从网络选择器或阻塞API为I/O操作分配线程)。很抱歉给您带来更多麻烦,请说明我的无知。根据我对任何http请求的理解,连接器会将请求发送给处理程序,并使用线程进行处理。我的理解正确吗?如果正确,那么在需要维护请求顺序的情况下,如何处理来自活动连接的请求跨线程?或者对于一组连接,是同一处理程序线程进程?这里的问题是服务器将保持TCP/IP连接永久打开。协议切换到WebSocket。这就像有一个正常的套接字连接。它不是一个(逻辑)连接的模拟http上的套接字连接,但却是真正的永久套接字连接。请参阅: