我使用线程和列表从我的Java套接字服务器处理多个客户端。假设套接字服务器是聊天服务器。
//ServerSocket
ServerSocket servSock = new ServerSocket(port_num);
while(true){
Socket sock = servSock.accept();
userList.add(sock); //List<Socket> userList.
Thread t = new Thread(new SocketListener(sock, userList));
t.Start();
}
//Socket Listener Class
public void run(){
...
//sending part for broadcasting message
for(Socket sock : userList){
if(sock!=userSock){
sock.write();.....
}
}
...
}
...
如果连接的客户端很少,这种方法似乎没有问题。这个问题是...... (1)我必须接近&#39; userList&#39;每次我发送东西给另一个客户。当然,我使用列表中的synchronized关键字来同步列表,但我觉得它仍然是一个开销。
(2)如果套接字断开连接或变为空,则会导致错误或崩溃。它可以通过发送循环中的try-catch短语来处理,但我不认为这是一种聪明的方法。
我的问题是,是否有更好的方法或模式来处理这种编码?