在Java TCP / IP套接字上处理多个请求是否相当容易。只需接受一条消息并生成一个线程。接受另一条消息并生成另一个线程。事情是,一旦你开始产生线程,事情变得更加不确定。假设你有10个客户端,一个客户端一直在发送请求,而另外9个客户发送请求占10%的多动客户端,发现很难查看。
您可以处理此问题的一种方法是在服务器中使用信号量的散列图,其中每个客户端都有相应的信号量。在处理任何客户端的请求之前,您可以通过其信号量并配置信号量,以便每个客户端在任何时候都只能有一定数量的请求。
在这个阶段,我在想是的,但有没有更好的方法或图书馆呢?
答案 0 :(得分:2)
......但是有更好的方法......?
我使用一个接受线程/ serversocket 和一个预生成线程池来处理工作负载。接受线程只接受连接(不执行任何操作)并将处理程序套接字提供给池中的一个线程。该线程然后使用handler-socket直到客户端完成,然后关闭handler-socket。
你可以根据需要扩展这个设置:如果你注意到接受线程大多数时间都在等待池线程,那么你需要x2你的池线程数,如果你注意到接受线程是你创建的瓶颈(A)另一个接受线程和(B)另一个接受连接的套接字,并且可选地(C)将它们放在另一台机器上。
如果客户端比其他客户端更重要,则可以预期/需要使用一个超级活动客户端描述的特定问题:在这种情况下,您无需执行任何操作。或者它可以被视为拒绝服务攻击,在这种情况下,你应该有一个启发式,只是断开客户端,暂时禁止其IP地址。