gpt4 book ai didi

java - (线程新手)构建即时消息应用程序的最佳方式?

转载 作者:行者123 更新时间:2023-11-30 11:55:04 25 4
gpt4 key购买 nike

我用 Java 编程有一段时间了,但以前从未处理过线程。在我的一门类(class)中,我们了解了易于使用但功能非常强大的 SocketServerSocket 类。我们制作了可以在同一台机器上相互交谈的程序(使用“localhost”)。有两个类,一个 Server.java 和一个 Client.java,但它们只能以回合制方式相互交谈。

我想将 socket.accept() 方法放在一个新线程上,这样服务器和客户端程序都可以在 socket.accept() 时发送消息正在等待新消息。

到目前为止,我在线程方面做得很好,但我想不出将 ServerSocket/Socket 对象放在哪里。如果我将它们放在等待传入消息的线程中,我就不能将该对象用于传出消息。如果我将 ServerSocket/Socket 对象直接放在 Server.java/Client.java 文件中,我不能(或者我只是不知道如何)将对象传递给线程,而不创建它的副本。

关于我应该如何构建这个程序有什么建议吗?

谢谢,德里克

最佳答案

我认为运行此应用程序的最佳方式是作为两个独立的进程/虚拟机,而不是两个线程。虽然您目前在同一台(虚拟)机器上运行它们,但即时消息传递和套接字的全部意义在于允许不同进程之间的通信,这些进程可能位于不同的机器上。您已经拥有这两个类 - 只需确保它们都有 main() 方法,以便它们可以自行运行。

此外,如果您想要全双工通信,则每个进程需要有两个线程 - 一个等待用户的输入并将其发送到另一端,另一个等待来自另一端的消息并将它们呈现给用户。虽然您可以设置一个半双工系统,其中 token 在单个套接字上来回传递和转发,但如果您在每一端设置一个传入套接字和一个传出套接字,您可能会发现这要容易得多。

如果你想从两端进行全双工通信,我认为这不是真正的客户端/服务器关系。如果双方能够平等地交谈,他们就真的更平起平坐了。一定要有一个“服务器”类来监听传入消息,以及一个“客户端”类来发送传出消息,但每台机器上都有一个。这些映射非常接近发送和接收线程。

关于java - (线程新手)构建即时消息应用程序的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com