我开发了一个程序,它有两个部分:
一个是客户端:只是发送消息服务器
另一部分是服务器:只接收消息,并将按摩保存到地图中。(键是channelID,值为List,通道发送的所有消息将保存在列表中)
我使用这样的代码:
for (int i = 0; i < 20; i++)
{
client.sendMessage(new Message(i));
}
如果我是第一次运行客户端,服务器地图中只有2条消息,丢失了18条消息。如果我再次运行客户端,地图中的所有消息都没有丢失。
如果我发送这样的消息:
for (int i = 0; i < 20; i++)
{
Thread.sleep(50);
client.sendMessage(new Message(i));
}
没有消息丢失。
有人打电话告诉我这是什么问题?
感谢
答案 0 :(得分:1)
写入消息在netty中是异步的,因此您的循环可能在消息实际发送到remotepeer之前完成。确保要么等待所有写入通过调用完成,例如Channel.write(..)。await ..();