QQbot第一弹-nonebot的原理——gocqhttp的数据包

QQbot第一弹-nonebot的原理——gocqhttp的数据包_第1张图片


title: ‘QQbot第一弹:nonebot的原理————go-cqhttp的数据包’
date: 2023-01-11 22:03:53
tags: nonebot

导论

  1. go-cqhttp的链接
    • 项目的概述
  2. go-cqhttp与nonebot的通信连接
    • 连接方式
    • socket服务器的接收实例
    • websocket服务器的接收实例

go-cqhttp的链接

  • 项目的概述

go-cqhttp,基于 Mirai 以及 MiraiGo 的 OneBot Golang 原生实现的项目,主力是go语言编写(俺也不会捏)

(反正就是ddl很nb哒←明明什么都不知道的小白)

它的兼容性:

接口
  • http api
  • 反向http post
  • 正向websocket
  • 反向websocket

性能

  • 在关闭数据库的情况下, 加载 25 个好友 128 个群运行 24 小时后内存使用为 10MB 左右. 开启数据库后内存使用将根据消息量增加 10-20MB , 如果系统内存小于 128M 建议关闭数据库使用。

go-cqhttp 帮助中心

QQbot第一弹-nonebot的原理——gocqhttp的数据包_第2张图片


go-cqhttp与nonebot的通信连接

  • 连接方式

go-cqhttp与nonebot的链接可以选择gc提供的接口的几种方式

我想要反向websocket进行获取,就是我作websoocket的服务器,让go-cqhttp作客户端给我们发送消息(其实是因为不是很了解这些接口),我好菜

选择3,反向websocket,这样也可以看看go-cqhttp的到底发的什么玩意

  • socket服务器的简单实例

我们先打开go-cqhttp并登录

QQbot第一弹-nonebot的原理——gocqhttp的数据包_第3张图片

下面是一个简单的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服务端,它为我们提供了更详细的内容:

QQbot第一弹-nonebot的原理——gocqhttp的数据包_第4张图片

发现Connection: UpgradeUpgrade: websocket,意思就是说要更换成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,大厂员工(不干了)):

QQbot第一弹-nonebot的原理——gocqhttp的数据包_第5张图片

你可能感兴趣的:(服务器,websocket,运维,python)