最近在研究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)
聊天类消息由用户发送,用于聊天。
[code]{ "msgtype": "chat_message", "room": null, "sender": "alice", "timestamp": 1694412000000, "payload": { "text": "你好,大家!", "extra": { "emoji": "
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |