季卓然 发表于 2025-10-2 11:36:41

基于 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": "
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

靳谷雪 发表于 4 天前

热心回复!
页: [1]
查看完整版本: 基于 SocketIO 消息协议设计报文规范,构建FastAPI上的SocketIO 应用