socket通讯是阻塞的,一个聊天就有一个socket,需要一直在哪里阻塞读取数据,所以就一个socket就要用一个线程了。如果用nio的话,通讯是非阻塞的,就不用一个聊天一个线程了。如果聊天人数大的话,建议用nio。现在netty框架就非常不错。
java提供了两种IO方式,一种是基于阻塞式的(BIO),一种是基于非阻塞式的(NIO),基于阻塞式的socket会一直阻塞在等待客户端的链接上,如果客户端有链接过来则分配一个线程去处理,然后又继续阻塞;如果是基于NIO的socket,会用到缓冲技术,socket将会被放到通道上,即使客户端没有链接过来,也不会一直的去阻塞,会一直的去轮询,直到通道可以进行读写为止,所以可以做到一条线程去处理多个链接。。。如果是用BIO的方式就是一个scoket一条线程,如果是NIO的话就不用考虑。
你是用swing来做的么?
应该是这么说,一个socket一个线程。
服务器开启中。。。
客户端1启动的时候,创建socket客户端,发起请求,并且显示窗口。
你可以在服务端用线程池管理socket数量。。
其实无论怎么做都是可以的,只是那种更加优化.
通常的做法一个socket一个线程就可以了.根据命令请求解析内容.把不同内容放到不同的聊天窗口中.
另外如果只是聊天的话,建议用udp比较好.可以采用udp协议+应答机制.
理论上是一个用户一个socket,而不是窗口。
1、必须采用短连接;
2、采用TCP做聊天窗口不合理,建议UDP;
3、设置服务端的会话超时,以便于缓解会话连接数增加的压力;
4、线程的增加按业务需求而定,不是必须使用。