Replies: 6 comments 6 replies
-
你是出于什么考虑想这样子区分的? 不过从可用性角度来说,少一个连接,可用性保证可以少很多事。 |
Beta Was this translation helpful? Give feedback.
-
这两个是我拍脑袋随便想的…… |
Beta Was this translation helpful? Give feedback.
-
你说的很对,不过因为通过是否存在某字段来区分事件和动作响应已经工作得挺好了(在曾经的 CQHTTP 和后来的 OB11 中),所以没有太大必要去做修改,破坏现有代码逻辑 |
Beta Was this translation helpful? Give feedback.
-
统一 payload 模型确实是个不错的想法,可以作为 ob13(如果还会有的话)的 feature |
Beta Was this translation helpful? Give feedback.
-
这里会存在很多争议的地方,我大概整理一下: 统一 payload(套一层)这样的样子就像是上面说的:
这种的优点在于能根据 另加字段这是我个人之前的设想,也有人和我提到过,就是加一个独立的字段:
这样的好处就是不用动基本的结构,只需要加一个判断的字段就够了。缺点就是还是需要现行修改下结构体对象,涉及的改动也不小,对于解释型语言或者弱类型语言好处理一些。现在的逻辑层面其实可以通过判断是否存在 关于楼主提到的问题
我个人的意见是,如果需要在执行动作时再创建新的 ws,那就失去了 ws 全双工的意义了。当然如果你是为了做收发区分,你也可以在实现端让它发起两个反向 ws 或开一个正向 ws,你用 SDK 端发起两个连接,其中一个连接收到的事件完全忽略就可以做到了。
HTTP 协议的请求 payload 和 响应 payload 你也只能通过第一行的 HTTP/1.1 在哪个位置进行判断,所以我觉得判断关键字段存不存在而区分收发包并没有什么特别明显的不妥。 |
Beta Was this translation helpful? Give feedback.
-
其实这个问题主要是,以前 cqhttp 的时候是先有 event 和 action 分连接,之后才有 universal 连接的,后来 onebot 12 只保留了 universal 连接 |
Beta Was this translation helpful? Give feedback.
-
刚刚发现在 WebSocket 中,动作响应和事件是通过同一个 ws 混在一起推送给应用端的,就想知道怎么判断哪些消息是事件,哪些是动作响应。
跑去看了半天动作响应与事件的文档,感觉似乎只能通过收到的对象所拥有的字段来判断收到的消息究竟属于动作响应还是事件……
参考了一下各种 OneBot SDK 的实现,发现确实大家都在用类似的方法来判断
post_type
字段来判断消息类型的echo
字段来判断的echo
字段来判断的总感觉这种判断方式不是很好……
如果 OneBot 应用端能够选择发起一个 ws 连接专门用于接收事件推送,在需要执行动作的时候再创建新的 ws ,这样两边的消息就不会混在一起了🤔
或者增加一个共有的字段用来标记消息属于事件还是动作响应🤔
Beta Was this translation helpful? Give feedback.
All reactions