【问题标题】:How to set DotNetty(Netty) Bootstrap.ConnectAsync timeout?如何设置 DotNetty(Netty) Bootstrap.ConnectAsync 超时?
【发布时间】:2021-06-16 18:05:57
【问题描述】:

我在 Unity 中使用 DotNetty,并且有以下客户端引导程序,当服务器关闭时,“clientBootstrap.ConnectAsync()”大约需要 17 秒才能放弃尝试建立连接,在此期间,客户端被冻结。实际上,不需要尝试 17 秒就知道无法连接。 如何配置“clientBootstrap.ConnectAsync()”仅尝试 5 秒? 我添加了“.Option(ChannelOption.ConnectTimeout, TimeSpan.FromMilliseconds(5000))”,但仍然需要 17 秒才能停止尝试。该选项仅触发了额外的超时异常。

    try
    {
        var clientBootstrap = new Bootstrap();
        clientBootstrap
            .Group(group)
            .Channel<TcpSocketChannel>()
            .Option(ChannelOption.TcpNodelay, true)
            .Option(ChannelOption.ConnectTimeout, TimeSpan.FromMilliseconds(1000))
            .Handler(new ActionChannelInitializer<ISocketChannel>(channel =>
            {
                var pipeline = channel.Pipeline;
                pipeline.AddLast(new IdleStateHandler(0, 0, 6));
                ......
            }));
        clientChannel = await clientBootstrap.ConnectAsync(new IPEndPoint(IPAddress.Parse(IP), Port));

非常感谢。

【问题讨论】:

    标签: .net unity3d tcp netty


    【解决方案1】:

    你应该可以根据this设置超时:

    不熟悉 dotnetty 但适用于您的 sn-p 我会尝试类似:

    try
    {
        var clientBootstrap = new Bootstrap();
        clientBootstrap
            .Group(group)
            .Channel<TcpSocketChannel>()
            .Option(ChannelOption.TcpNodelay, true)
            .Option(ChannelOption.ConnectTimeout, TimeSpan.FromMilliseconds(1000))
            .Handler(new ActionChannelInitializer<ISocketChannel>(channel =>
            {
                var pipeline = channel.Pipeline;
                pipeline.AddLast(new IdleStateHandler(0, 0, 6));
                ......
            }));
        
        int timeout = 5000;
        var clientChannel = clientBootstrap.ConnectAsync(new IPEndPoint(IPAddress.Parse(IP), Port));
        if (await Task.WhenAny(clientChannel, Task.Delay(timeout)) == clientChannel) {
            // task completed within timeout
        } else { 
            // timeout logic
        }
    }
    

    有用的读取任务延迟documentation

    【讨论】:

    • 感谢您的帮助。
    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2019-06-25
    相关资源
    最近更新 更多