因为有很多用户进行@
消息轮询,虎绿林开始变卡了,所以有必要切换到WebSocket推送。
编程语言不限,需要实现用户身份认证(基于http cookie hu60_sid
,应该可以获取到吧)。
参考这个微信推送服务,连接阿里 canal 来获取内信和@
消息的实时通知:
https://github.com/hu60t/hu60wap6/blob/master/src/service/wechat-push.php
部署测试环境的方法可以参考 https://hu60.cn/q.php/bbs.topic.102524.html
【可选】步骤21:微信推送服务里面提到了如何部署阿里canal。
关于 @rkonfj 之前提到的ChatGPT机器人功能设想:
该系统可以分为两个模块。一个模块负责维护应用层的用户会话并实现通用的聊天api(REST 或者 WebSocket ),可以暂且称为
chat-server
;另一个模块负责和ChatGPT网页
、chat-server
模块交互,暂且称为chat-agent
(即为老虎你现在在做的油猴脚本)。
每个拥有 OpenAI 的账号都可以运行chat-agent
,chat-server
拥有所有agent
的信息,可以在收到新会话时分配给不同的agent
去处理。
如果有人有兴趣,也可以集成在WebSocket推送服务里。比如,推送服务可以把某些uid的@消息
设置为公开可见,所有人都可以订阅它的消息。然后它有消息过来时,随机选择一个订阅者发送,然后这个订阅者就可以通过同一连接回复该消息。如果某个订阅者成功回复了消息,此后对于同一用户发来的@
消息,都优先转发给这个订阅者(以便保持用户的会话记忆),直到这个订阅者下线。
这样就能实现任何人都能接入机器人了。
不过为了防止滥用,还是需要对用户进行身份认证。用户首先得是一个合法的虎绿林用户,才能订阅机器人消息。这样如果有人捣乱,可以根据uid拒绝他接入。此外,还需要设计为只有收到消息的连接才可以回复,并且收到一条消息只能回复一条消息。还可以设计一个功能,当用户发送类似“屏蔽当前机器人”之类的内容时,给他换个机器人。
@胡椒舰长 提供了一个新思路,我们其实可以搭建一个单独的WebSocket推送服务,然后再把 https://github.com/hu60t/hu60wap6/blob/master/src/service/wechat-push.php 改造一下,让它使用stream_socket_send发送到websocket推送服务,这个推送服务再发送给用户。
websocket服务器也可以基于微信推送程序进行改造。
如果有人能帮虎绿林做个测试环境的docker镜像,那就再好不过了。我没时间做。