多任务处理:一客户一线程
来源:互联网 发布:c语言cos函数算法实现 编辑:程序博客网 时间:2024/05/08 13:10
一客户一线程
在一客户一线程(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类的构造函数,当调用Thread的start()方法时,新线程将执行EchoProtocol的run()方法(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
- 多任务处理:一客户一线程
- 任务一 成绩处理
- Linux多任务编程(一)---任务、进程、线程
- Linux多任务编程(一)---任务、进程、线程
- Linux多任务编程(一)---任务、进程、线程
- Linux多任务编程(一)---任务、进程、线程
- Android中的多线程处理(一)——线程任务管理器
- AsyncTask异步任务线程框架(一)
- 任务线程和同步(一、Parallel)
- Ios9-Multitasking-多任务处理一(悬浮视频)
- 多任务处理:线程池
- 多线程(四):任务一->线程汇合->任务二
- 任务一
- android-线程与消息处理(一)
- iOS线程处理 学习笔记(一)并发
- 线程安全处理笔记(一)
- 线程池处理 多个任务
- 通过线程池处理多任务
- 多任务处理:多线程
- 进程与程序联系与区别
- 多任务处理:服务器协议
- CallWindowProc与DefWindowProc的区别
- 首次来到csdn网站
- 多任务处理:一客户一线程
- 多任务处理:线程池
- VC MFC 钩子 实现 自绘 窗体 标题栏 非客户区
- [文本]字符编码基础--ASCII、DBCS、Unicode
- 历届奥斯卡获奖影片(1927—2012)(图)
- 多任务处理:管理调度Executor 接口
- java 序列化与反序列化(一)
- [文本]字符编码基础:Unicode浅析(UCS-2/4、UTF-8/16/32)
- 多任务处理:阻塞和超时