首页 > 解决方案 > 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不起作用。

标签: c#networking

解决方案


推荐阅读