需求
最近学习了java IO和java NIO,想用java NIO写一个多人聊天室,需求简单如下:
- 1.每个用户可以跟一个或多个人聊天
- 2.为了简单起见,每个用户只有一个用户名属性,用户名不可重复
- 3.可以统计在线人数
- 4.不需要GUI,采用console输入和展示即可
设计与实现
- 采用java NIO
- 线程池?可以先不用,等学完java并发系列后在升级成线程池
- 涉及到的对象:
- ChatServer:server端docket,监听某一端口号来启动server socket
- ChatClient:客户端socket,来跟server端socket进行通讯
- ChatRoom:一个聊天室对应一个群聊,注意:例如一个人可以在群聊的同时跟群里的某一个人私聊,所以管理一个群聊和多个私聊
- Chat:一次chat实例,启动一个server socket(server socket应该可以被重用,对于client来说时透明的)和client socke。类型分为群聊和私聊
待解决的问题
- ServerSocketChannel和SocketChannel都需要设置成非阻塞吗
configueBlocking(false)
? 是的 把ServerSocketChannel设置成false,是为了让accept方法为非阻塞的,把SocketChannel设置成false,为了让connect,read和write方法是非阻塞的 - serverSocketChannel和socketChannel的读取应该采用多线程吗
- 性能瓶颈在哪里