繁体   English   中英

处理TCP / IP套接字上的多个请求

[英]Handling multiple requests on a TCP/IP Socket

在Java TCP / IP套接字上处理多个请求是否相当容易。 只需接受一条消息并生成一个线程。 接受另一条消息并生成另一个线程。 事情是,一旦你开始产生线程,事情变得更加不确定。 假设你有10个客户端,一个客户端一直在发送请求,而其他9个客户发送请求占10%的多动客户端,发现它更难以查看。

您可以处理此问题的一种方法是在服务器中使用信号量的哈希映射,其中每个客户端都有相应的信号量。 在处理任何客户端的请求之前,您可以使其通过其信号量并配置信号量,以便每个客户端在任何时候都只能有一定数量的请求。

在这个阶段,我在想是的,但有没有更好的方法或图书馆这样做?

......但是有更好的方法......?

我使用每个serversocket一个接受线程和一个预生成线程池来处理工作负载。 接受线程只接受连接(不执行任何操作)并将处理程序套接字提供给池中的一个线程。 该线程然后使用handler-socket直到客户端完成,然后关闭handler-socket。

您可以根据需要扩展此设置:如果您注意到接受线程大多数时间都在等待池线程,那么您需要x2池池线程数,如果您注意到接受 - thread是你创建的瓶颈(A)另一个接受线程和(B)另一个接受连接的套接字,并且可选地(C)将它们放在另一台机器上。

如果客户端比其他客户端更重要,则可以预期/期望您使用一个超级活动客户端描述的特定问题:在这种情况下,您必须不执行任何操作。 或者它可以被视为拒绝服务攻击,在这种情况下,您应该有一个启发式,只是断开客户端并暂时禁止其IP地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM