多任务处理:一客户一线程

一客户一线程

 在一客户一线程(thread-per-client)的服务器中,为每个连接都创建了一个新的线程来处理。服务器循环执行一些任务,在指定端口上侦听连接,反复接收客户端传入的连接请求,并为每个连接创建一个新的线程来对其进行处理。 

TCPEchoServerThread.java实现了这种一客户一线程的服务器结构。它与迭代服务器非常相似,也是用一个循环来接收和处理客户端的请求。主要不同点在于这种服务器为每个连接创建了一个新的线程来处理,而不是直接处理。(这是可行的,因为EchoProtocol类实现 Runnable接口。)因此,当多个客户端几乎同时连接服务器时,后请求的客户端不需要等服务器对前面的客户端处理结束后才获得服务,相反,它们看起来是同时接受的服务(虽然比对单一客户端进行服务要稍微慢一些)。 

TCPEchoServerThread.java

0 import java.io.IOException;

1 import java.net.ServerSocket;

2 import java.net.Socket;

3 import java.util.logging.Logger;

4

5 public class TCPEchoServerThread {

6

7 public static void main(String[] args) throws

IOException {

8

9 if (args.length != 1) { // Test for correct # of args

10 throw new IllegalArgumentException("Parameter(s):

<Port>");

11 }

12

13 int echoServPort = Integer.parseInt(args[0]); // Server

port

14

15 // Create a server socket to accept client connection

requests

16 ServerSocket servSock = new

ServerSocket(echoServPort);

17

18 Logger logger = Logger.getLogger("practical");

19

20 // Run forever, accepting and spawning a thread for each

connection

21 while (true) {

22 Socket clntSock = servSock.accept(); // Block waiting

for connection

23 // Spawn thread to handle new connection

24 Thread thread = new Thread(new EchoProtocol(clntSock,

logger));

25 thread.start();

26 logger.info("Created and started Thread " +

thread.getName());

27 }

28 /* NOT REACHED */

29 }

30 }

  

TCPEchoServerThread.java 

1.参数解析和服务器套接字/日志记录器创建:第9-18 

2.一直反复循环,处理传入的连接请求:第21-27

接收传入的连接请求:第22

创建一个新的Thread实例来处理新的连接:第24

由于EchoProtocol类实现了Runnable接口,所有我们可以将其新实例作为参数传递给Thread类的构造函数,当调用Threadstart()方法时,新线程将执行EchoProtocolrun()方法(run()方法里面调用的是handleEchoClient()方法)。

为连接开始执行新的线程并记录日志:第25-26 

Thread 类的getName()方法返回一个包含新线程名字的String实例。

 

相关下载:

Java_TCPIP_Socket编程(doc)

http://download.csdn.net/detail/undoner/4940239

 

文献来源:

UNDONER(小杰博客) :http://blog.csdn.net/undoner

LSOFT.CN(琅软中国) :http://www.lsoft.cn

 

转载于:https://www.cnblogs.com/wuyida/archive/2012/12/23/6301070.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值