odoo16,17开启gevent多进程多线程,WebSocket提高性能及启用消息推送

odoo16有一个最大的性能提升,就是从longpolling改成了web socket的方式来推送消息。这个改进顺应了互联网应用的趋势,同时这也是我们整合AI服务的基础,因为AI都是通过消息推送来进行服务的,而且是高频推送。同样,物联网应用因为需要高频推送状态信息,真正运营也必须使用多进程和websocket推送。

以下是启用Web Socket后,Ai主动推送信息回答的效果,使用阿里通义千问,3秒内就响应了。


odoo16启用Web Socket

为什么必须启用Web Socket

 Odoo一直以来都是一个基于互联网架构的ERP,绝大多数方面她都做得很好。

但在消息推送上,在odoo16版本以前,都是使用的http协议长连接long-polling方式,这种方式的好处是协议简单标准化,我们二开省事很多。但缺点也很明显,就是大量占据服务器资源。详情可Bing搜索一下 long polling 与 web socket 即可了解。

随着网络应用不断发展,现在绝大多数的浏览器和App都支持web socket了。因此,在 odoo16上,终于改用了 web socket 模式,虽然开发上增加了一些难度,但却带来了巨大的性能提升。

特别在针对物联网应用如RFID应用,Ai应用如我们的Ai服务中心,这类应用都需要高频的推送消息。

同时,odoo的定时任务cron也是多进程跑的,因此必须开启 genent,才能正常启用定时任务。

Web Socket好处

需要主动推送的应用通过 web socket实现,就提升明显了。

  • 推送更快。每次信息互动保持一个唯一连接,消除长连接(长轮询)的延迟问题
  • 内容更精简。由于不使用http协议,无需发文件头等额外信息。
  • 全双工异步。客户端和服务器都可以独立地相互传输消息。
  • 配置简单。在大型网络中,WebSockets 无需任何配置即可通过大多数防火墙。


odoo端配置

参考官方文档

系统配置处,配置好 odoo.conf ,一般使用默认即可,参考

https://www.odooai.cn/documentation/16.0/zh_CN/administration/install/deploy.html 

如果需要自行定制端口,这个一般在国企或者有信创要求的单位很常见,就使用  gevent_port 参数。如 odoo.conf 中

gevent_port = 8072

同时注意

proxy_mode = True


Nginx 端配置

同样参考上述官方文档即可,配置好 upstream即可。


Windows 内特殊处理

由于Windows本身是不直接支持Python的多进程的,那么我们要手动再启动一个 odoo 进程,f增加使用 gevent,这时把 Websocket启用,比如执行指令中增加

%CD%\runtime\python3\python3 %CD%\source\odoo-bin gevent -c %CD%\odoo.conf --update=""

在我们的绿色版中已有内置,将 gevent 相关执行取消注释就成。

参考 odoo智能版下载中 odoo16绿色高速版处理

https://gitee.com/odooai/odoo-ai 


开发端Pycharm端配置

开发端因为要自定义启动odoo,故同样要配置好 gevent。

参考下图,我们在启动正常开发Python进程时,要启一个 gevent 进程


odoo16启用Web Socket

省事可直接使用Boost提速模块

主要是针对Windows用户,在odoo13~16版本中,如果你没有配置好 long-polling 或者 web socket,你会发现你的 odoo 经常会停滞不响应,这就是因为没有配置好消息推送,导致odoo响应超时。

此时,你停止相关的推送请求即可,这个需要前端 js 及后端 py 一起处理,我们有相关模块,安装后即停止消息推送,极大的减少了 odoo 的资源使用。

市场搜索  app_odoo_boost 即可

https://apps.odoo.com/apps/modules/browse?search=app_odoo_boost 

适用以下场景

  • 如果你仅使用 odoo 的进销存,生产等各种功能模块,不需要讨论及Ai辅助等功能
  • 在Windows下开发,只处理业务功能开发,不需要即时推送


Nginx实例

完整Nginx.conf示例

参考官方文档即可


#odoo server
upstream odoo {
  server 127.0.0.1:8069;
}
upstream odoochat {
  server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

# http -> https
server {
  listen 80;
  server_name odoo.mycompany.com;
  rewrite ^(.*) https://$host$1 permanent;
}

server {
  listen 443 ssl;
  server_name odoo.mycompany.com;
  proxy_read_timeout 720s;
  proxy_connect_timeout 720s;
  proxy_send_timeout 720s;

  # SSL parameters
  ssl_certificate /etc/ssl/nginx/server.crt;
  ssl_certificate_key /etc/ssl/nginx/server.key;
  ssl_session_timeout 30m;
  ssl_protocols TLSv1.2;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_prefer_server_ciphers off;

  # log
  access_log /var/log/nginx/odoo.access.log;
  error_log /var/log/nginx/odoo.error.log;

  # Redirect websocket requests to odoo gevent port
  location /websocket {
    proxy_pass http://odoochat;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
  }

  # Redirect requests to odoo backend server
  location / {
    # Add Headers for odoo proxy mode
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_redirect off;
    proxy_pass http://odoo;
  }

  # common gzip
  gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
  gzip on;
}










odoo16,17开启gevent多进程多线程,WebSocket提高性能及启用消息推送
欧度智能, 店小二
2024年9月1日
2024年9月9日
3,044
评论:
0
分享这篇文章
标签
存档
odoo17将全新发布,实操新功能全面预览及对比odoo16