Java NIO - 聊天室

803 阅读1分钟

需求

最近学习了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的读取应该采用多线程吗
  • 性能瓶颈在哪里