我有两个设计用于即时消息程序,我正在用Java编写
第一个想法使用2个单独的线程.第一个线程忽略了gui,并通过写入阻塞套接字发送即时消息数据.第二个线程使用另一个阻塞套接字来监视来自朋友的传入数据包.我不确定使用线程是否是解决此问题的最佳方法,但我发现它比使用非阻塞套接字通道更容易处理.
我的第二个设计是在一个线程中使用非阻塞套接字通道,偶尔会检查是否有传入或传出数据.这个设计的好处是我不必担心线程之间的资源共享,但我不确定它是否更有效.
老实说,我真正关心的是制作一个平稳有效的程序.您认为构建更高效,更容易的设计是什么?我只是在玩耍,所以我没有建立高效和强大的客户端/服务器程序的经验,而不是我的感官告诉我的.
解决方法:
很久以前我制作了一个软件,它有一个带有TCP / IP:套接字的聊天模块.
在每个客户端的开头,它是2个线程:ReaderThread和WriterThread.这还不够,因为客户端断开连接.我也需要创建一个InactivityChecker线程,因为读者无法检测服务器端的断开连接,而只有当他有消息时才能检测到写入器. 3线程/客户端有点浪费资源,但它可以同时达到5000个客户端! – 会通过上下文切换吃你的处理器!还必须注意打开的最大端口号.
如果您出于技术原因“同时”允许超过65525/2个客户端,那么异步方式就是唯一的方法.