c# - Dotnetty WriteAsync 无法正常工作,但 WriteAndFlushAsync 可以
问题描述
我正在使用服务器,并且正在使用 DotNetty。服务器所做的是接收一条消息,检查它的标题,然后调用正确的消息事件。除了一件事之外,这一切都有效。
假设我有一个名为的消息事件LoginMessageEvent
。在这里,您要发送多个响应(= composer),例如登录结果和客户端详细信息。所以我的想法是有一个这样的 QueueComposer 函数:
public Task QueueComposer(Composer composer)
{
return _channel.WriteAsync(composer);
}
并具有这样的 Flush 功能:
public void Flush()
{
_channel.Flush();
}
(_channel = IChannel)
因此,在我的消息事件中,发送内容的部分如下:
public async Task Handle(Session session, Event message)
{
Player player = await _playerController.Login(username, password);
if (player != null)
{
await session.QueueComposer(LoginResult.Compose(true));
await session.QueueComposer(ClientDetails.Compose(session));
session.Flush();
}
else
{
await session.Disconnect();
}
}
但是,这不会做任何事情。由于某些事件只发送一个响应,我还有一个函数会调用WriteAndFlushAsync
,如下所示:
public async Task SendComposer(Composer composer)
{
await _channel.WriteAndFlushAsync(composer);
}
如果我将更改 if 语句中的代码:
await session.SendComposer(LoginResult.Compose(true));
await session.SendComposer(ClientDetails.Compose(session));
虽然我的想法认为这并不理想,所以我想知道为什么分开QueueComposer
并且Flush
不起作用。
解决方案
推荐阅读
- python-3.x - 如何将包含一个数据的不同部分的多个数据帧合并为一个?
- vba - VBA 对象 SpeakXML True
- ios - WKWebView 未在 iOS 13 上加载网页
- angular - Angular - (模糊)事件被触发并更新相邻单元格中的值
- python - QTableWidget 不稳定
- angular - Angular 8将项目添加到数组并更新mat-list中的显示
- python - 无需登录即可将文件上传到谷歌驱动器
- vuejs2 - 如何预加载图像以在过渡组中使用
- python - 实时更新 matplotlib 图形以进行数据采集
- jmeter - Jmeter - 运行一次 HTTP 请求以存储要在多个线程中使用的密钥