Lagrange.Core icon indicating copy to clipboard operation
Lagrange.Core copied to clipboard

[Bug?]: 反向websocket连接到后端时不时出现断线然后重联,导致消息丢失

Open TU-O0T opened this issue 1 year ago • 5 comments

请确保您已阅读以上注意事项,并勾选下方的确认框。

  • [X] 我已经仔细阅读上述内容
  • [X] 我已经使用 最新构建 测试过,问题依旧存在。
  • [X] 我已经在 Issue Tracker 中找过我要提出的问题,没有找到相同问题的ISSUE。
  • [X] 我已知晓并同意,此处仅用于汇报程序中存在的问题。若这个 Issue 是关于其他非程序本身问题,则我的 Issue 可能会被无条件自动关闭或/并锁定。(其它疑问请考虑加入TG群询问或在discussions中提问)

Lagrange项目

OneBot

所使用/依赖的Lagrange项目对应的commit

Lagrange.OneBot Version: 0.0.3+47b819d43ad101a1a066a3f8afa094d000fe19f5

运行环境

Linux

运行架构

x64

连接方式

反向 WebSocket

重现步骤

较短时间内大量用户对机器人的请求

期望的结果是什么?

让Lagrange 稳定保持对机器人后端的连接

实际的结果是什么?

当较多用户在较短时间内请求机器人时,机器人后端和Lagrange 的websocket连接有几率断开,导致看Lagrange 日志是能收到消息但机器人后端(如koishi、nonebot2)收不到消息。大约在十几秒后连接恢复。

简单的复现代码/链接(可选)

No response

Trace 级别日志记录(可选)

warn: Lagrange.Core.BotContext[0]
      [2024-11-15 14:50:41] [BusinessContext] [WARNING]: Error when processing the event: Lagrange.Core.Internal.Event.Message.SendMessageEvent
warn: Lagrange.Core.BotContext[0]
      [2024-11-15 14:50:41] [BusinessContext] [WARNING]: System.Net.Http.HttpRequestException: An error occurred while sending the request.
       ---> System.Net.Http.HttpIOException: The response ended prematurely. (ResponseEnded)
         at System.Net.Http.HttpConnection.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
         --- End of inner exception stack trace ---
         at System.Net.Http.HttpConnection.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
         at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
         at System.Net.Http.HttpMessageHandlerStage.Send(HttpRequestMessage request, CancellationToken cancellationToken)
         at System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
         at System.Net.Http.HttpMessageHandlerStage.Send(HttpRequestMessage request, CancellationToken cancellationToken)
         at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
         at System.Net.Http.HttpMessageHandlerStage.Send(HttpRequestMessage request, CancellationToken cancellationToken)
         at System.Net.Http.SocketsHttpHandler.Send(HttpRequestMessage request, CancellationToken cancellationToken)
         at System.Net.Http.HttpClient.Send(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
         at System.Net.Http.HttpClient.Send(HttpRequestMessage request)
         at Lagrange.OneBot.Utility.OneBotSigner.Sign(String cmd, UInt32 seq, Byte[] body, Byte[]& e, String& t)
         at Lagrange.Core.Internal.Packets.SsoPacker.Build(SsoPacket packet, BotAppInfo appInfo, BotDeviceInfo device, BotKeystore keystore, SignProvider signProvider)
         at Lagrange.Core.Internal.Context.PacketContext.SendPacket(SsoPacket packet)
         at Lagrange.Core.Internal.Context.BusinessContext.SendEvent(ProtocolEvent event)

补充说明(可选)

系统:Debian12 nonebot2和koishi均在物理机上运行 Lagrange在docker中运行,网络模式为hosts

TU-O0T avatar Nov 16 '24 02:11 TU-O0T

我也用的nonebot2,Lagrange接收QQ消息并传给nonebot2没问题,但nonebot2处理完成去call api的时候会经常性的断线重连

BeiDouQiX avatar Dec 04 '24 14:12 BeiDouQiX

+1

NekoWings avatar Dec 06 '24 09:12 NekoWings

+1

BaicaijunOvO avatar Jan 25 '25 15:01 BaicaijunOvO

     at Lagrange.OneBot.Utility.OneBotSigner.Sign(String cmd, UInt32 seq, Byte[] body, Byte[]& e, String& t)

你与签名的连通性不好, 找一个连通性好的签名

DarkRRb avatar Apr 13 '25 09:04 DarkRRb

但这个不会导致断连才对, 麻烦给出完整的日志

DarkRRb avatar Apr 13 '25 09:04 DarkRRb