文档详情

基于Socket的并发服务器实现.doc

发布:2017-08-12约2.77千字共5页下载文档
文本预览下载声明
基于SocketJava语言实现   ????????????????????????????????????????? 赵文清   ????????????????????? (华北电力大学计算机科学与工程系? 保定? 071003)   ??? 摘? 要? 介绍了Socket编程和并发服务器的基本概念及实现过程,并结合一个具体实例介绍了并发服务器的Java语言实现过程,在实际运行时状态稳定、良好。 ? 关键词? Socket?? 并发服务器?? Java?? 多线程 ? ??? 网络服务器主要分为2种: ??? (1)循环服务器(iterative server)该服务器一个时刻只能处理一个请求,多个请求同时到来将会放在请求队列里。 ??? (2)并发服务器(concurrent server)在每个请求到来以后分别产生一个新进程来处理这个请求所产生的连接。TCP的Socket服务器大多采用并发方式提供服务。 ??? 随着计算机技术的发展,现在的操作系统同时运行多个进程(或线程)。Socket机制成功地解决了2台主机不同进程(或线程)之间的通信问题。在客户机/服务器模式下,一台服务器往往要对多个客户机进行服务,本文就如何借助于Java语言的多线程机制,实现并发服务器,来适应多个客户的并发访问做了详尽的探讨。 1 Socket编程技术 ? 一个完整的Socket连接可描述的5个要素(5元组):协议、本地地址、本地端口、远地地址、远地端口 ,它由分处于2台主机的2个socket的半相关描述构成,每个半相关描述为:协议、本地地址、本地端口 。soc ket机制主要是围绕着如何建立各自的半相关,以及半相关如何扩展成为全相关展开的。图1是一个典型的面向连接的socket通信机制示意图。它采用客户/服务器模式,由服务器方先建立自己的半相关(建立socket并将socket联编到某个端口上),并进入监听状态,同时监听是否有与自己端口相对应的连接请求 。连接是客户方发送的。客户方在建立自己的半相关后,向服务器发起连接(调用方法connect()),服务器在检测到连接后,接受连接(调用方法accept()),这样就建立起来一个完整的连接。 ???????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????  2 并发服务器 2.1 并发服务器的原理 并发服务器的原理是服务器在接受客户方的请求后,立即调度一个线程以处理服务器与客户之间的交互,主程序则返回继续监听端口,对待下一客户的连接请求。 2.2 并发服务器的实现方法 并发服务器有多种实现方法: ? 服务器和每个接收到的客户机进行连接,创建一个新的子进程处理这个客户机请求。 ? 服务器预先创建多个子进程,由子进程处理客户机请求。这种方式叫做“预创建”服务器。 ? 服务器用函数select实现对多个客户机连接的多路复用。 ? 超级服务器激活的服务器。 并发服务器由于其算法而具有与生俱来的快速响应优势,而且当某一个用户与服务器通信死锁,不会影响其他进程,但由于多个进程之间需要通过进程间通信实现信息交换,而且新进程所带来的开销随着用户数量的增加越来越大,因此原始的并发服务器并不一定是最好的选择。Java语言给具有方便的线程机制,用多线程来代替多进程,实现并发服务器,为我们进行快速的聊天室的开发提供了优势。 3 用Java实现并发服务器 3.1 Socket通信的实现 ? 利用Java的多线程机制可以非常方便地实现并发服务。每当服务器主程序创建一个新的套接字连接(即成功地调用了accept()方法)的时候,就启动一个新的线程来负责本服务器和该客户之间的连接,主程序将返回并等待下一个连接。ThreadedChtHandle类是从Thread类衍生出的处理聊天过程的子类,它的run()方法包括了服务器和客户的通信循环判断客户的请求(例如登录、发言、刷新在线列表),处理发言数据,发送聊天信息等等。下面是一个服务器程序的部分代码。 ?? … tServer{ public static void main(String[] args) try {ServerSocket s=new ServerSocket(8080); /*创建一个监视8080端口的服务器套接字, */ { Socket newjoin=s.accept();/*等待一个连接。如果该连接未被创建,本方法阻塞当前线程。返回值是一个Socket对象,服务器程序利用这个对象与连接的客户通信。*/ .out.pr
显示全部
相似文档