Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature request]请求支持签名服务器冗余功能,以及签名服务器不可用时禁止发送消息。 #2360

Closed
rhwong opened this issue Aug 10, 2023 · 15 comments

Comments

@rhwong
Copy link

rhwong commented Aug 10, 2023

环境信息

go-cqhttp版本: 5db03c7

需要添加的功能内容

请求支持多签名服务器冗余功能,以及签名服务器不可用时禁止发送消息功能。
实现如下:

  1. 当无法获取签名结果时,禁止发送消息。
  2. 设置多个签名服务器地址,用于提高可靠性。
    如主要签名服务器设置为本地签名服务器,备用签名服务器使用其他人提供的在线服务,或者直接在本地开若干个qsign用于冗余。
  3. 当前主要签名服务器无法获取签名结果时,尝试1-3次自动重新注册失败时,切换至下一个备用签名服务器地址,若无法注册,继续向下切换至下一个备用签名服务器。
  4. 当下一次refresh-interval定时刷新token时,测试主要签名服务器是否可以使用,若可以使用,切换回主要签名服务器。若依旧离线,则继续保持在当前可用的备用服务器上。
  5. 当全部签名服务器无法使用时,禁止发送消息或离线。
@rhwong rhwong changed the title 请求支持签名服务器冗余功能,以及签名服务器不可用时禁止发送消息。 [Feature request]请求支持签名服务器冗余功能,以及签名服务器不可用时禁止发送消息。 Aug 10, 2023
@ShiaBox
Copy link

ShiaBox commented Aug 10, 2023

请求支持+1

2 similar comments
@jinyu2022
Copy link

请求支持+1

@FanJZSS
Copy link

FanJZSS commented Aug 11, 2023

请求支持+1

@1umine
Copy link
Contributor

1umine commented Aug 12, 2023

除了禁止发消息和主动离线,其他的感觉其实可以自己建立一个签名服务器集群,定时检测每个服务是否可用,不可用后就切换到另一个,集群对外只保留一个服务地址,自己只需要填这一个服务地址()

@rhwong
Copy link
Author

rhwong commented Aug 13, 2023

除了禁止发消息和主动离线,其他的感觉其实可以自己建立一个签名服务器集群,定时检测每个服务是否可用,不可用后就切换到另一个,集群对外只保留一个服务地址,自己只需要填这一个服务地址()

emmm我的意思是普通用户也能使用的冗余,而不是我作为一个API服务提供方的提升网络高可用SLA的策略。
如果说作为服务方我肯定有的是办法去保活,包括不限于寄了自动起,无法访问自动杀,或者像您说的配好几个作为集群。
但是作为一个使用http://127.0.0.1:8080来当签名服务器的用户,那他可就倒了大霉了。

@1umine
Copy link
Contributor

1umine commented Aug 14, 2023

https://github.com/1umine/go-cqhttp/actions/runs/5851860425
支持配置多个sign-server,234基本实现了,连续多次全部不可用时可根据配置决定是否退出程序(离线)或者不再进行切换,保持使用主签名服务器。禁止发消息不会做,感觉得改 MiraiGo 才行(
有没有当第一个吃螃蟹的(

@rhwong
Copy link
Author

rhwong commented Aug 15, 2023

https://github.com/1umine/go-cqhttp/actions/runs/5851860425 支持配置多个sign-server,234基本实现了,连续多次全部不可用时可根据配置决定是否退出程序(离线)或者不再进行切换,保持使用主签名服务器。禁止发消息不会做,感觉得改 MiraiGo 才行( 有没有当第一个吃螃蟹的(

太感谢了 我试试(让我康康

@BlackcatWatcher
Copy link

BlackcatWatcher commented Aug 16, 2023

https://github.com/1umine/go-cqhttp/actions/runs/5851860425 支持配置多个sign-server,234基本实现了,连续多次全部不可用时可根据配置决定是否退出程序(离线)或者不再进行切换,保持使用主签名服务器。禁止发消息不会做,感觉得改 MiraiGo 才行( 有没有当第一个吃螃蟹的(

yml默认生成有问题,双引号需要改单引号,前面要加http://。

失败的设置:

sign-servers:
    - "127.0.0.1:8080"  # 主签名服务器
    - "192.168.1.6:8801"  # 备用

日志

[2023-08-17 03:08:41] [INFO]: 当前版本:d4a1ca0
[2023-08-17 03:08:41] [INFO]: 将使用 device.json 内的设备信息运行Bot.
[2023-08-17 03:08:41] [INFO]: 正在检查签名服务器 127.0.0.1:8080 是否可用.(0/2)
[2023-08-17 03:08:41] [INFO]: 正在检查签名服务器 192.168.1.6:8801 是否可用.(1/2)
[2023-08-17 03:08:41] [WARNING]: 警告: 未配置签名服务器, 这可能会导致登录 45 错误码或发送消息被风控
[2023-08-17 03:08:41] [INFO]: Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.
[2023-08-17 03:08:46] [INFO]: 开始尝试登录并同步消息...
[2023-08-17 03:08:46] [INFO]: 使用协议: Android Pad 8.9.63.11390
[2023-08-17 03:08:46] [WARNING]: 当前协议不支持二维码登录, 请配置账号密码登录.

成功的设置:

sign-servers:
    - 'http://127.0.0.1:8080'  # 主签名服务器
    - 'http://192.168.1.6:8801'  # 备用

@1umine
Copy link
Contributor

1umine commented Aug 16, 2023

yml默认生成有问题,双引号需要改单引号,前面要加http://。

失败的设置:

sign-servers:
    - "127.0.0.1:8080"  # 主签名服务器
    - "192.168.1.6:8801"  # 备用

日志

[2023-08-17 03:08:41] [INFO]: 当前版本:d4a1ca0
[2023-08-17 03:08:41] [INFO]: 将使用 device.json 内的设备信息运行Bot.
[2023-08-17 03:08:41] [INFO]: 正在检查签名服务器 127.0.0.1:8080 是否可用.(0/2)
[2023-08-17 03:08:41] [INFO]: 正在检查签名服务器 192.168.1.6:8801 是否可用.(1/2)
[2023-08-17 03:08:41] [WARNING]: 警告: 未配置签名服务器, 这可能会导致登录 45 错误码或发送消息被风控
[2023-08-17 03:08:41] [INFO]: Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.
[2023-08-17 03:08:46] [INFO]: 开始尝试登录并同步消息...
[2023-08-17 03:08:46] [INFO]: 使用协议: Android Pad 8.9.63.11390
[2023-08-17 03:08:46] [WARNING]: 当前协议不支持二维码登录, 请配置账号密码登录.

成功的设置:

sign-servers:
    - 'http://127.0.0.1:8080'  # 主签名服务器
    - 'http://192.168.1.6:8801'  # 备用

没问题,双引号也是可以的,默认配置是 没有写具体签名服务器的,失败是因为你刚开始没写http前缀

@rhwong
Copy link
Author

rhwong commented Aug 17, 2023

没问题,双引号也是可以的,默认配置是 没有写具体签名服务器的,失败是因为你刚开始没写http前缀

emmm...主备服务器分别是不同的密码的情形该怎么办

@1umine
Copy link
Contributor

1umine commented Aug 17, 2023

emmm...主备服务器分别是不同的密码的情形该怎么办

没写()

@BlackcatWatcher
Copy link

判断是否可用的方法可能有问题,8801-8840用的是docker版1.1.7b2。
1、查找可用服务器时,用从当前条目往下的方式,而不是重新从0开始(qsign按顺序使用按顺序蹦,查起来太慢),或者使用异步,哪个可用用哪个。(虽然一般人不会整几十个服务器)
2、如果判断起来麻烦,不如获取错误时也判定为不可用。不可用时就不用切换时重新判断,可以在平常去隔段时间异步判断确定可用性。带来的问题是全部不可用时,需要重新判断全部。

日志:

[2023-08-17 09:43:35] [WARNING]: 当前签名服务器 http://192.168.1.6:8804 不可用,正在查找可用服务器
[2023-08-17 09:43:35] [INFO]: 正在检查签名服务器 http://127.0.0.1:8080 是否可用.(0/36)
[2023-08-17 09:43:37] [INFO]: 正在检查签名服务器 http://192.168.1.6:8801 是否可用.(1/36)
[2023-08-17 09:43:42] [INFO]: 正在检查签名服务器 http://192.168.1.6:8802 是否可用.(2/36)
[2023-08-17 09:43:45] [WARNING]: 获取sso sign时出现错误: Post "http://192.168.1.6:8804/sign": EOF. server: http://192.168.1.6:8804
[2023-08-17 09:43:45] [WARNING]: token 已过期, 总丢失 token 次数为 4
[2023-08-17 09:43:45] [WARNING]: 当前签名服务器 http://192.168.1.6:8804 不可用,正在查找可用服务器
[2023-08-17 09:43:45] [WARNING]: 获取sso sign时出现错误: Post "-/sign": unsupported protocol scheme "". server: http://192.168.1.6:8804
[2023-08-17 09:43:47] [INFO]: 正在检查签名服务器 http://192.168.1.6:8803 是否可用.(3/36)
[2023-08-17 09:43:52] [INFO]: 正在检查签名服务器 http://192.168.1.6:8804 是否可用.(4/36)
[2023-08-17 09:43:52] [INFO]: 使用签名服务器 http://192.168.1.6:8804
[2023-08-17 09:43:52] [WARNING]: 刷新 token 出现错误: code=1, msg: Uin is not registered.. server: http://192.168.1.6:8804
[2023-08-17 09:44:52] [WARNING]: 获取sso sign时出现错误: Post "http://192.168.1.6:8804/sign": context deadline exceeded (Client.Timeout exceeded while awaiting headers). server: http://192.168.1.6:8804

@1umine
Copy link
Contributor

1umine commented Aug 17, 2023

判断是否可用的方法可能有问题,8801-8840用的是docker版1.1.7b2。 1、查找可用服务器时,用从当前条目往下的方式,而不是重新从0开始(qsign按顺序使用按顺序蹦,查起来太慢),或者使用异步,哪个可用用哪个。(虽然一般人不会整几十个服务器) 2、如果判断起来麻烦,不如获取错误时也判定为不可用。不可用时就不用切换时重新判断,可以在平常去隔段时间异步判断确定可用性。带来的问题是全部不可用时,需要重新判断全部。

日志:

[2023-08-17 09:43:35] [WARNING]: 当前签名服务器 http://192.168.1.6:8804 不可用,正在查找可用服务器
[2023-08-17 09:43:35] [INFO]: 正在检查签名服务器 http://127.0.0.1:8080 是否可用.(0/36)
[2023-08-17 09:43:37] [INFO]: 正在检查签名服务器 http://192.168.1.6:8801 是否可用.(1/36)
[2023-08-17 09:43:42] [INFO]: 正在检查签名服务器 http://192.168.1.6:8802 是否可用.(2/36)
[2023-08-17 09:43:45] [WARNING]: 获取sso sign时出现错误: Post "http://192.168.1.6:8804/sign": EOF. server: http://192.168.1.6:8804
[2023-08-17 09:43:45] [WARNING]: token 已过期, 总丢失 token 次数为 4
[2023-08-17 09:43:45] [WARNING]: 当前签名服务器 http://192.168.1.6:8804 不可用,正在查找可用服务器
[2023-08-17 09:43:45] [WARNING]: 获取sso sign时出现错误: Post "-/sign": unsupported protocol scheme "". server: http://192.168.1.6:8804
[2023-08-17 09:43:47] [INFO]: 正在检查签名服务器 http://192.168.1.6:8803 是否可用.(3/36)
[2023-08-17 09:43:52] [INFO]: 正在检查签名服务器 http://192.168.1.6:8804 是否可用.(4/36)
[2023-08-17 09:43:52] [INFO]: 使用签名服务器 http://192.168.1.6:8804
[2023-08-17 09:43:52] [WARNING]: 刷新 token 出现错误: code=1, msg: Uin is not registered.. server: http://192.168.1.6:8804
[2023-08-17 09:44:52] [WARNING]: 获取sso sign时出现错误: Post "http://192.168.1.6:8804/sign": context deadline exceeded (Client.Timeout exceeded while awaiting headers). server: http://192.168.1.6:8804

考虑到一般人不会配置太多,就直接从头遍历了,当前服务失效是通过签名请求失败或者获取的签名为空判断的,失效后查找时判断方式是直接顺序请求api index页,看能不能正常响应并获取正常结果。
配置多个带来的可用性提升和使用体验感觉其实是微乎其微的,目前qsign1.1.6以上版本问题比1.1.0的时候少很多了,一个崩了切换到另一个只是差了重启那点时间的样子,重启qsign耗时仅仅是几秒而已,仅仅是只配置一个,但是崩溃时或者状态异常时重启qsign也能保障绝大部分情况下正常使用了。

@1umine
Copy link
Contributor

1umine commented Aug 17, 2023

@rhwong
Copy link
Author

rhwong commented Sep 4, 2023

已实现

@rhwong rhwong closed this as completed Sep 4, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants