go-cqhttp,基于 Mirai 以及 MiraiGo 的 OneBot Golang 原生实现的项目,主力是go语言编写(
俺也不会捏)(反正就是ddl很nb哒←明明什么都不知道的小白)
它的兼容性:
接口
- http api
- 反向http post
- 正向websocket
- 反向websocket
性能
- 在关闭数据库的情况下, 加载 25 个好友 128 个群运行 24 小时后内存使用为 10MB 左右. 开启数据库后内存使用将根据消息量增加 10-20MB , 如果系统内存小于 128M 建议关闭数据库使用。
go-cqhttp 帮助中心
go-cqhttp与nonebot的链接可以选择gc提供的接口的几种方式
我想要反向websocket进行获取,就是我作websoocket的服务器,让go-cqhttp作客户端给我们发送消息
(其实是因为不是很了解这些接口),我好菜选择3,反向websocket,这样也可以看看go-cqhttp的到底发的什么玩意
我们先打开go-cqhttp并登录
下面是一个简单的socket服务器,那么为什么要用socket而不是websocket捏,因为
我搞错了>,因为我也想知道如果协议不对,go-cqhttp会发个什么东西过来import socket server = socket.socket(socket.AF_INET, socket.sock_STREAM) server.bind(("", port)) # 端口号 server.listen(126) # 设置监听,参数为最大队列数 new_socket, path = server.sccept() while True: data = new_socket.recv() if len(data) != 0: print(data.decode("utf-8")) breack new_socket.close() server.close()
↑(
什么垃圾代码)运行之后,出现一次心跳包后就close了,说明go-cqhttp客户端发现协议不对,主动断开链接了:
显示unexpected EOF,至于是什么意思。。。(自行baidu)
我们看看python的socket服务端,它为我们提供了更详细的内容:
发现Connection: Upgrade和Upgrade: websocket,意思就是说要更换成websocket
好!那就换吧
我使用python写了一个简单的异步websocket服务器,用json来解析json数据
import websocket import asyncio import json async def data(websocket, path): #创建一个异步回调函数data,传入两个参数,websocket套接字,path数据协议 async for message in websocket: # 迭代出websocket里面的数据 j = json.loads(message) print(j) asyncio.get_event_loop().run_until_compete(websocket.server(data, "localhost", post)) # 传入post,host,和 asyncio.get_event_loop().run_forever()
我们通过异步的方式接收代码,得到的数据可以分为三种
连接成功的提示消息:
与客户端的心跳
❤️包:
对应的消息数据:
这其中的就包括相应的消息数据,time等等,也就是有了nb的第一版(bushi
最后,挂一张老婆 Love丶伊卡洛斯(java大佬,b站up,大厂员工(不干了)):