基于 SocketIO 消息协议规范,并构建FastAPI上的SocketIO 应用
最近在研究Python下整合FastAPI的Socket.IO 应用,对于其WebSocket的消息报文协议进行了深入了解,并整理了相关的协议内容,整合到FastAPI的WebSocket通讯处理中,用作多端的消息通讯,如聊天,系统信息通知等。1. 总体设计
[*]统一事件名:客户端和服务端只监听/发送一个事件,例如:"message"。
[*]消息类型区分:通过 msgtype 字段区分不同的业务逻辑。
[*]通用字段:每条消息都必须包含的基础字段(如 msgtype, sender, timestamp)。
[*]扩展字段:放在 payload 里,根据不同类型自由定义。
[*]报文格式:统一为 JSON 格式。
[*]广播机制:服务端可以广播消息到所有客户端,方便消息的实时推送。
[*]房间机制:服务端可以创建、加入或离开房间,方便消息的分发。
2. 消息格式
{
"msgtype": "string", // 消息类型,如 "chat", "notification", "command"
"sender": "string", // 发送者标识,如用户ID或系统标识
"timestamp": "number", // 消息发送时间戳(毫秒)
"payload": { // 消息内容(不同 msgtype 有不同格式)
// 根据 msgtype 定义不同的结构
},
"room": "string", // 房间标识(可选),表示消息所属的房间
"touser": "string", // 接收者标识(可选),表示消息的目标用户,多个接收者用‘|’分隔
"totag": "string", // 接收者标签(可选),表示消息的目标用户标签,多个标签用‘|’分隔
}例子:
{
"msgtype": "chat",
"room": "room1",
"sender": "user1",
"timestamp": 1612345678901,
"payload": {
"text": "Hello, world!"
}
}3. 消息类型
3.1 系统类消息(system)
系统类消息由系统发送,用于通知客户端或服务端状态变化。
{
"msgtype": "system_notice",
"sender": "system",
"timestamp": 1694412000000,
"payload": {
"level": "info", // info, warning, error
"text": "服务器即将维护"
}
}3.2 聊天类消息(chat)
聊天类消息由用户发送,用于聊天。
{"msgtype": "chat_message","room": null,"sender": "alice","timestamp": 1694412000000,"payload": { "text": "你好,大家!", "extra": { "emoji": "
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]