Netty - 客户竞争数据?

时间:2014-12-02 16:33:34

标签: java networking netty

所以,我需要测试我的应用程序中的一个功能,它要求我打开两个客户端,这两个客户端都是通过localhost连接的。我通过频道发送所有数据,似乎频道不同。

客户一:[id: 0xd7f05dd1, /127.0.0.1:56571 => /127.0.0.1:5055]

客户二:[id: 0xeb0a36e7, /127.0.0.1:56606 => /127.0.0.1:5055]

但是,当通过网络发送信息并打开多个客户端时,客户端会竞争数据,这是一个例子:

服务器发送信息:

[DEBUG::Packet_02_RegisterRemotePlayer]: Wrote ID: 97271
[DEBUG::Packet_02_RegisterRemotePlayer]: Wrote X: 6.54161
[DEBUG::Packet_02_RegisterRemotePlayer]: Wrote Y: -8.271806
[DEBUG::Packet_02_RegisterRemotePlayer]: Wrote Z: 1.8378098
[DEBUG::Packet_02_RegisterRemotePlayer]: Wrote ROT: 0.0
[DEBUG::Packet_02_RegisterRemotePlayer]: Wrote PRIV: 0
[DEBUG::PacketBuffer]: Packet with an id of 2 was constructed.
[DEBUG::PacketBuffer]: The packet was 28 bytes long.
[DEBUG::PacketBuffer]: The packet type was TCP

所有这些数据都写入ByteBuf,然后通过网络作为字节发送[]

此数据包仅发送到客户端B,其中包含有关客户端A的信息,但客户端A和客户端B都攻击网络以检索此数据。

上面发送的所有数据都应该由客户端b读取(按照确切的顺序),但这是结果。

客户一读:

[2]Read ID: -1056679599
[2]Read X: 1.8378098
[2]Read Y: 0.0
[2]Read Z: 0.0

客户二阅读:

[2]Read ID: 1087460574
[2]Read X: -8.271806
[2]Read Y: 1.8378098
[2]Read Z: 0.0
[2]Read ROT: 0.0

正如您所看到的,客户端甚至没有完成它在任何一种情况下的读取,因为流是饥饿的,因为两个客户端都试图从中读取它。

发送数据时:

getChannel().writeAndFlush(buffer.retain());

所有这些数据都存储在ByteBuf(Netty 4)AKA ChannelBuffer(Netty 3)中

调试显示我们只发送到客户端二,但两个客户端仍然尝试读取它,我该如何防止这种情况?

0 个答案:

没有答案