gpt4 book ai didi

c# - 有时我向苹果服务器发送 APN 时出现超时异常

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:36 25 4
gpt4 key购买 nike

我的代码:

var uri = new Uri($"{domain}/3/device/{deviceToken}");

var client = new Http2Client(uri); // using HttpTwo

var headers = new NameValueCollection
{
{"apns-id", Guid.NewGuid().ToString()},
{"apns-expiration", "0"},
{"apns-priority", "10"},
{"apns-topic", topic},
{"authorization", $"bearer {jwtToken}"}
};

var body = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(payload));

var response = await client.Send(uri,HttpMethod.Post, headers, body);

这段代码大部分时间都能给出正确的响应,但偶尔我会收到操作超时异常。

---> System.TimeoutException: The operation has timed out. at HttpTwo.Http2Client.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at HttpTwo.Http2Client.d__17.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at HttpTwo.Http2Client.d__15.MoveNext()

最佳答案

您可以为您的连接设置 Http2Client.ConnectionSettings.ConnectionTimeout,这样它会更容易预测 )))并且您应该为 apns 连接实现重新连接逻辑。像这样:

int retry = 0;
while (retry < 1)
{
try
{
var response = await client.Send(uri,HttpMethod.Post, headers, body);
break;
}
catch (TimeoutException)
{
retry++;
}
}

来自文档:

在多个通知中保持与 APNs 的连接;不要反复打开和关闭连接。 APNs 将快速连接和断开连接视为拒绝服务攻击。除非您知道连接会长时间闲置,否则您应该保持连接打开——例如,如果您每天只向用户发送一次通知,则每天使用一个新连接是可以接受的做法。

关于c# - 有时我向苹果服务器发送 APN 时出现超时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43193964/

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