【发布时间】:2011-07-14 05:12:48
【问题描述】:
我必须创建一个套接字服务器来监听多个客户端。假设有 6 个客户端同时连接到服务器,每个客户端同时向服务器发送一些命令。如果这些客户端每 1 秒向服务器发送一次消息,我该如何处理来自服务器端 6 个客户端的这些消息,以将其存储在表中并确认给每个客户端。
我如何处理来自客户端的这些输入。我是否必须创建 6 个线程来处理来自客户端的这些输入。
请给我一个解决这个问题的想法。
【问题讨论】:
我必须创建一个套接字服务器来监听多个客户端。假设有 6 个客户端同时连接到服务器,每个客户端同时向服务器发送一些命令。如果这些客户端每 1 秒向服务器发送一次消息,我该如何处理来自服务器端 6 个客户端的这些消息,以将其存储在表中并确认给每个客户端。
我如何处理来自客户端的这些输入。我是否必须创建 6 个线程来处理来自客户端的这些输入。
请给我一个解决这个问题的想法。
【问题讨论】:
为每个客户端连接创建一个新线程,并不断对每个线程中的流进行阻塞读取,以查找要处理的数据。
class Server {
ClientThread threads[];
int size;
ServerSocket serverSocket;
boolean active;
Server() throws Exception {
/* initialize connection */
active = true;
listen();
}
void listen() throws Exception {
while ( active ) {
Socket clientSocket = serverSocket.accept();
threads[ size++ ] = new ClientThread( clientSocket );
threads[ size - 1 ].start();
}
}
}
class ClientThread extends Thread {
OutputStream out;
InputStream in;
boolean active;
ClientThread( Socket clientSocket ) throws Exception {
out = clientSocket.getOutputStream();
in = clientSocket.getInputStream();
}
public void run() {
active = true;
while ( active ) {
listen();
}
}
private void listen() {
try {
int res = process( in.read() );
out.write( res );
} catch ( Exception e ) {}
}
private int process( int b ) {
return -1;
}
}
【讨论】:
您有什么理由不能使用 servlet 容器来执行此操作?这是 Servlet + Tomcat/Jetty 中的 10 行代码。
【讨论】: