我必須創建一個套接字服務器來監聽多個客戶端。假設有6個客戶端同時連接到服務器,並且每個客戶端同時向服務器發送一些命令。如果這些客戶端每隔1秒向服務器發送消息,我如何處理來自服務器端的6個客戶端的這些消息,以將其存儲在表中並向每個客戶端發送確認。在java中有多個客戶端的套接字服務器
如何處理來自客戶端的這些輸入。是否必須創建6個線程來處理客戶端的這些輸入。
請給我一個想法來解決這個問題。
我必須創建一個套接字服務器來監聽多個客戶端。假設有6個客戶端同時連接到服務器,並且每個客戶端同時向服務器發送一些命令。如果這些客戶端每隔1秒向服務器發送消息,我如何處理來自服務器端的6個客戶端的這些消息,以將其存儲在表中並向每個客戶端發送確認。在java中有多個客戶端的套接字服務器
如何處理來自客戶端的這些輸入。是否必須創建6個線程來處理客戶端的這些輸入。
請給我一個想法來解決這個問題。
你不能使用servlet容器來做這件事的任何理由?這是Servlet + Tomcat/Jetty中的10行代碼。
爲每個客戶端連接創建一個新線程,並不斷對每個線程中的流執行阻塞讀取以查找要處理的數據。
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;
}
}
+1,但有保留。我不會稱之爲「輪詢」,我會稱之爲阻塞式閱讀,你當然應該做一些關於EOS的事情。 – EJP
是的,儘管我知道read()塊,while循環讓我開始思考輪詢。感謝您的高舉。 – blackcompe
要求是在socket.Anyway可以指導我如何做的servlet。 – bharathi