几个小时以来,我一直在思考应该如何使用 Java Sockets 来发送和接收数据。我希望你能帮助我找到一个好的方法来做到这一点。
我已经构建了一个服务器/客户端结构,客户端连接到服务器并让他自己的线程处理请求-响应方法。信息被封装在 XML 中。
一开始,服务器开始阻塞套接字读取。首先,我使用 writeInt() 来传输 XML 消息的长度。之后,服务器读取长度字节的数量并解析消息。传输完成后,客户端进入接收状态并等待响应。
这很好,但是在客户端进行身份验证后,服务器会等待将要发生的事情并阻塞。
但是当服务器没有需要传输的信息时该怎么办。我可以尝试破坏读取阻塞并将消息发送给客户端。但是如果客户想到他也有一条消息并且也开始发送会发生什么。在那一刻,没有人会听。
为此,也许我可以使用某种缓冲区,但我觉得这不是我应该走的路。
我已经搜索了一段时间,发现了一些有趣的信息,但我没有很好地理解它们。可悲的是,我的书只是关于这个简单的套接字模型。
也许我应该使用两个线程。一发一收。服务器有一个数据库,其中存储了消息并等待传输。因此,当服务器收到一条消息时,他将该消息存储在数据库中,并且“收到消息”之类的答案也将存储在数据库中。发送者线程会查看是否有新消息并将“收到的消息”发送给客户端。这种方法不会以毫秒为单位发送答案,但我可以想象它会运作良好。
我希望我给了你足够的信息来说明我正在尝试什么。你会建议我如何实施这种沟通?
谢谢