<分区>
我有两个用 Java 编写的即时消息程序的设计
第一个想法使用 2 个独立的线程。第一个线程忽略了 gui,并通过写入阻塞套接字来发送即时消息数据。第二个线程使用另一个阻塞套接字来监视来自 friend 的传入数据包。我不确定使用线程是否是解决此问题的最佳方法,但我发现它比使用非阻塞套接字 channel 更容易处理。
我的第二种设计是在一个线程中使用非阻塞套接字 channel ,它会偶尔检查是否有传入或传出数据。这种设计的好处是我不必担心线程之间的资源共享,但我不确定它是否更有效率。
老实说,我真正关心的是制作一个运行流畅高效的程序。您认为哪种设计更高效、更易于构建?我只是在玩,所以除了我的感官告诉我的,我没有构建高效和强大的客户端/服务器程序的经验。
很久以前我做了一个软件,里面有TCP/IP聊天模块:sockets。
在开始时,每个客户端都是 2 个线程:ReaderThread 和 WriterThread。这还不够,因为客户端会断开连接。我也需要制作一个 InactivityChecker 线程,因为读者无法检测到服务器端的断开连接,而作者只有在收到消息时才能检测到。 3 thread/client 有点浪费资源,但是最多可以同时支持 5000 个 clients!! -它会通过上下文切换吃掉你的处理器!还必须注意打开的最大端口号。
如果出于技术原因您希望“同时”允许超过 65525/2 个客户端,则异步方式是唯一可行的方法。