gpt4 book ai didi

.net - 如何设置 DotNetty(Netty) Bootstrap.ConnectAsync 超时?

转载 作者:行者123 更新时间:2023-12-04 03:36:56 27 4
gpt4 key购买 nike

我在 Unity 中使用 DotNetty,并具有以下客户端 Bootstrap ,当服务器关闭时,“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));
非常感谢你。

最佳答案

您应该可以根据 this 设置超时时间:
不熟悉 dotnetty 但应用​​于您的代码段,我会尝试以下操作:

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 :

关于.net - 如何设置 DotNetty(Netty) Bootstrap.ConnectAsync 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66706343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com