Java多线程服务器如何应对相关链接问题

Java多线程服务器是目前很多企业都在使用的一种服务器方式。相关的问题还是需要不断的学习,只有不断的学习才能更好的掌握相关的问题解决方案。希望大家有所收获。

10年积累的成都网站设计、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有磐安免费网站建设让你可以放心的选择与我们合作。

前面的示例教给您基础知识,但并不能令您更深入。如果您到此就停止了,那么您一次只能处理一台客户机。原因是 handleConnection() 是一个阻塞方法。只有当它完成了对当前连接的处理时,服务器才能接受另一个客户机。在多数时候,您将需要(也有必要)一个Java多线程服务器。

要开始同时处理多台客户机,并不需要对 RemoteFileServer 作太多改变。事实上,要是我们前面讨论过待发(backlog),那我们就只需改变一个方法,虽然我们将需要创建一些新东西来处理进入的连接。这里我们还将向您展示Java多线程服务器 ServerSocket 如何处理众多等待(备份)使用服务器的客户机。本示例对线程的低效使用,所以请耐心点。

接受(太多)连接

这里我们实现改动过的 acceptConnections() 方法,它将创建一个能够处理待发请求的 ServerSocket ,并告诉 ServerSocket 接受连接:

Java代码

 
 
 
  1. public void acceptConnections() {   
  2. try {   
  3. ServerSocket server = new ServerSocket(listenPort, 5);   
  4. Socket incomingConnection = null;   
  5. while (true) {   
  6. incomingConnection = server.accept();   
  7. handleConnection(incomingConnection);   
  8. }   
  9. } catch (BindException e) {   
  10. System.out.println("Unable to bind to port " + listenPort);   
  11. } catch (IOException e) {   
  12. System.out.println("Unable to instantiate a ServerSocket on port: " + listenPort);   
  13. }   
  14. }   
  15. public void acceptConnections() {  
  16. try {  
  17. ServerSocket server = new ServerSocket(listenPort, 5);  
  18. Socket incomingConnection = null;  
  19. while (true) {  
  20. incomingConnection = server.accept();  
  21. handleConnection(incomingConnection);  
  22. }  
  23. } catch (BindException e) {  
  24. System.out.println("Unable to bind to port " + listenPort);  
  25. } catch (IOException e) {  
  26. System.out.println("Unable to instantiate a ServerSocket on port: " + listenPort);  
  27. }  

新的 server 仍然需要 acceptConnections() ,所以这些代码实际上是一样的。突出显示的行表示一个重大的不同。对这个多线程版,我们现在可以指定客户机请求的最大数目,这些请求都能在实例化 ServerSocket 期间处于待发状态。如果我们没有指定客户机请求的最大数目,则我们假设使用缺省值 50。

这里是它的工作机制。假设我们指定待发数(backlog 值)是 5 并且有五台客户机请求连接到我们的服务器。我们的服务器将着手处理第一个连接,但处理该连接需要很长时间。由于我们的待发值是 5,所以我们一次可以放五个请求到队列中。我们正在处理一个,所以这意味着还有其它五个正在等待。等待的和正在处理的一共有六个。当我们的服务器仍忙于接受一号连接(记住队列中还有 2―6 号)时,如果有第七个客户机提出连接申请,那么,在Java多线程服务器中该第七个客户机将遭到拒绝。我们将在带有连接池服务器示例中说明如何限定能同时连接的客户机数目。

【编辑推荐】

  1. Java多线程如何创建多个线程
  2. Java多线程优化之偏向锁原理分析
  3. Java多线程初学者指南系列教程
  4. 使用Java多线程实现任务分发
  5. 用Java多线程实现无阻塞读取远程文件

网页标题:Java多线程服务器如何应对相关链接问题
网页网址:http://www.csdahua.cn/qtweb/news17/309317.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网