Java网络编程。关于 socket 的问题

标签 java networking sockets

我有一个服务器,有 2 个客户端通过 TCP 连接到它。 这些客户端不断地向服务器发送信息。 这是一个代理服务器并中继它从客户端接收到的消息。 但它必须交替中继消息。即来自客户端 A 的消息,然后是来自客户端 B 的消息,然后是 A,然后是 B,依此类推。 这可以通过检查消息的来源然后交替中继消息并忽略来自同一客户端的连续消息来实现。

但是,如果任何客户端断开连接或不发送消息,我也不希望服务器陷入困境。 如果发生这种情况,代理将继续永远等待来自现在已断开连接(或由于某种原因未发送消息)的客户端的某些消息。在这种情况下,我希望服务器从唯一连接的客户端中继消息。

相反,我在想这样的事情是否可能。如果我从同一个客户端收到 2 条连续的消息,我想检查是否读取了另一个客户端向我发送消息。 我的问题是是否有可能从其他客户端的套接字检查是否有缓冲并准备发送的消息。 在这种情况下,可以忽略来自同一客户端的连续消息,而是先从另一个客户端发送消息。 (我已经检查过了。)

这可能吗?希望我已经清楚地问了这个问题。

谢谢

最佳答案

我是这样阅读问题的:

你有:

1台服务器

2个客户

您的服务器从客户端 1 和 2 获取消息并转发它们。

客户端是不同的生产者,这意味着他们发送的消息可能不同。您想要的是来自客户端的消息交替地从您的服务器发送出去,而不是在客户端掉线时“等待”。

在这种情况下,我建议您在服务器中有两个队列(client1queue 和client2queue)。

您将不得不在两个单独的线程中从套接字中读取数据,并在收到消息时将其添加到相应的队列中。 client1Socket -> client1queue client2Socket -> client2queue

然后,在第三个线程中,让服务器转发消息,交替从 client1queue 和 client2queue 中拉取这些消息。

要解决队列为空时“不等待”的问题,只需跳过该队列的“轮到”。这确保以尽可能快的速度发送所有消息,同时仍能传递所有消息。缺点是它只有在消息准备好发送时才会交替。当然,您可以让它等待 X 数量以查看消息是否来自另一个队列,但我不明白如果系统应该工作而不管客户端状态如何,您为什么要这样做。

关于Java网络编程。关于 socket 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/756169/

相关文章:

c++ - FileServer 可以避免高 CPU 使用率吗?

python - 发送到未监听的ip/port时,Python的UDP崩溃

java - ClassNotFoundException 之谜

java - 使用户无法访问网页

java - 将数据写入远程mongodb数据库

networking - 可以在 rostopic 列表中看到主题但不能回显

c# - 使用套接字打印到IP地址和字节数组在某些打印机上打印空白页

java - 教学 javax.mail、javax.activation 识别 Web 应用程序中邮件附件的 mime 类型

java - 如何禁用最近 3 天和 future 的 DateTimePicker android

networking - 通过限制性出站防火墙建立 TCP 连接