2016-10-04 49 views
-1

我充当服务器,它从套接字中的客户端接收多个请求,并在线程中处理。如果每个TCP连接请求的最大数量

我应该在TCP级别设置任何参数来设置连接可以同时处理的最大请求数? 因为在我的服务器端,如果处理请求的速度很慢我观察到的其他请求正在排队(客户说请求已经发出,但我收到已故)

请指引我

+0

没有最大值,你不能设置一个,如果可以的话,它不会解决你的问题。每个连接的请求都是顺序的,而你的问题是并发性,或者说缺少它。您需要在单独的线程中处理每个客户端套接字。 – EJP

+0

我正在以多线程的方式处理请求。请求在持续的TCP连接中依次进入,等待响应,直到它向我发送下一个请求,或者它独立于天气,我为之前的请求发送响应。 – jan

+0

如果您已经'以多线程的方式处理[连接或]请求',即使不是不可能看到您的问题实际上是什么也很困难。如果您的客户端可能会通过已建立的连接行事,那么与设置每个连接的最大请求数量无关。 – EJP

回答

1

如果它需要很长有时间做这项工作,并且你想同时处理多个连接,你必须改变你的工作方式。

如果您在处理长请求期间主动使用大量CPU,则需要多个线程。这是实际获得更多CPU时间/秒的唯一方法 - 假设您有多个可用内核。

如果您正在等待文件IO等内容,则可以使用异步处理来处理单个线程上的请求,但一次只能处理一小段内容。

设置最大数量的TCP连接不会帮助您更快速地处理更多进程。它只会拒绝连接,甚至不允许先到先得的行为类型 - 如果特定的客户端通过或不通过,它将是随机的。

+0

目前我只在多个线程中处理请求。但是当我的数据库利用率很高时,我仍然会看到排队。通常需要1秒来处理请求,而且我不会遇到任何问题。但是,如果处理需要大约3- 4秒钟的客户表示他们没有及时收到回复。超时时间为25秒,但我正在处理并在4秒内发送。到目前为止,请求还在哪里。排队等候? – jan

+0

如果你的数据库太慢,你需要加快速度。无论您是希望客户超时还是拒绝连接,都无关紧要。如果你正在饱和数据库,也许你不想接受尽可能多的连接,但有很多方法可以解决它。但调整TCP连接可能是错误的方法。 – xaxxon