odoo websocket

odoo 将 longpolling 切换为 web socket,从此 odoo 具备了高效的双向通信能力

websocket 用在odoo web client的消息通知, 例如在 discuss 里面能接收到消息提醒,typing提示

   

服务端是 通过 http:// odoo.web.url/ websocket 提供的 endpoint,在 websocket 客户端连接上时,将协议升级为 WS ; 所以要使用 websocket 必须在 odoo 的前面增加一个 nginx 来处理 协议升级。 同时,还需要 将workers 参数设置为 大于0 ,这样才会启动 websocket 使用的单独进程

   

而客户端 则是在浏览器使用 service worker来单独启动一个线程,然后在此线程 加载 websocket client;它是通过 http:// odoo.web.url/ bus/websocket_worker_bundle 提供的。

   

odoo webclient 将消息通知的功能 封装在 bus_service 里面,因此 通过 bus_serivice 即可操作 websocket ; 它提供了一个核心方法来订阅 websocket

/**

* Subscribe to a single notification type.

*

* @param {string} notificationType

* @param {function} callback

*/

subscribe(notificationType, callback)

   

notificationType 是 消息类型; callback 则是对 返回的消息的处理函数/方法

   

odoo 后端给 websocket 发送消息时,使用 方法

@api.model

def _sendone(self, channel, notification_type, message)

这里的 notification_type 就是 客户端 订阅的 通知类型

   

   

技术架构

   

jeffery 2024年12月22日
标签
存档
odoo17采购订单合并