2

我有一个应用程序。由“经理”和“工人”组成。目前,worker总是发起连接,对manager说些什么,manager会发送response。

由于 Manager 和 Worker 之间有很多通信,我正在考虑在两者之间打开一个套接字并进行通信。我也希望从双方开始互动——让经理可以随时对工人说些什么。

但是,我对如何处理“碰撞”有点困惑。说,经理决定对工人说些什么,同时工人也决定对经理说些什么。会发生什么?这种情况应该如何处理?

PS 我计划使用 Netty 进行实际实现。

4

5 回答 5

3

“我也希望能从双方开始互动——让经理可以随时对工人说些什么。”

简单的回答。不。

从现有协议中学习:拥有客户端和服务器。事情会很顺利。Worker 可以是服务器,Manager 可以是客户端。经理可以提出许多请求。Worker 在请求到达时对其进行响应。

对等网络可能很复杂,复杂性没有真正的价值。

于 2010-04-22T01:53:34.567 回答
2

我会在服务器和客户端之间建立一个持久的双向通道。

如果您只有一台服务器和一个客户端,那么就不存在冲突问题......如果服务器接受连接,它就知道它是客户端,反之亦然。两者都可以在同一个套接字上读写。

现在,如果您有多个客户端并且您的服务器需要专门向客户端 X 发送请求,那么您需要握手

当客户端启动时,它会连接到服务器。建立此连接后,客户端将自己标识为客户端 X(握手消息)。服务器现在知道它有一个对客户端 X 开放的套接字,并且每次需要向客户端 X 发送消息时,它都会重用该套接字。

幸运的是,我刚刚写了一个关于这个精确问题的教程(包括示例项目)。使用网!:)

这是链接:http ://bruno.linker45.eu/2010/07/15/handshaking-tutorial-with-netty/

请注意,在此解决方案中,服务器不会尝试连接到客户端。连接到服务器的始终是客户端。如果您在每次要发送消息时都考虑打开一个套接字,则应该重新考虑持久连接,因为它们避免了连接建立的开销,从而将数据传输速率提高了 N 倍。

于 2010-07-19T02:00:31.437 回答
1

我认为您需要阅读套接字....

您并没有真正遇到这类问题......除了如何响应地处理接收和发送之外,通常这是通过线程化您的通信来完成的......根据应用程序,您可以采取多种方法来解决这个问题。

于 2010-04-22T01:49:25.603 回答
1

brunodecarvalho 的回复中提到的 Handshake/Netty 教程的正确链接是http://bruno.factor45.org/blag/2010/07/15/handshaking-tutorial-with-netty/
我会将其添加为对他的问题的评论但我没有这样做所需的最低声誉。

于 2010-08-04T18:52:09.270 回答
0

如果您想重新发明轮子并且不想使用中间件...

设计您的协议,以便其他对等方对您的请求的回答总是很容易与来自其他对等方的请求区分开来。然后,仔细选择您的网络 I/O 策略。负责从套接字读取的任何代码都必须首先确定传入数据是对已发送数据的响应,还是来自对等方的新请求(查看数据的标头,以及您是否已发出请求最近)。此外,您需要维护正确的队列,以便在您发送对对等方请求的响应时,它与您发出的新请求正确分开。

于 2010-08-04T21:15:46.220 回答