用用 uwsgi 来部署 django 项目用--http 和--socket 的不同处在哪?

2018-11-26 10:59:50 +08:00
 chengxiao
以前一直是用 --socket 来部署的,感觉不管用--http 还是-- socket,最后都要包一层 nginx 在外面,就是比较好奇,两种方式在执行效率上哪个会高一些
3809 次点击
所在节点    Python
10 条回复
wingyiu
2018-11-26 11:07:26 +08:00
文档有写
wizardoz
2018-11-26 11:09:59 +08:00
http 的话,nginx 和 uwsgi 中间走的是 http 协议,文本
socket 的话,nginx 和 uwsgi 中间走的是 wsgi 协议,二进制

感觉 wsgi 协议效率会更高一点
knightdf
2018-11-26 14:32:35 +08:00
通信协议不一样,就这,http 的多了包校验之类的
xpresslink
2018-11-26 15:20:59 +08:00
连接方式其实有三种
unix Socket,这个性能效率最高,直接内存交换,但必须应用和 NGX 同在一台服务器上
TCP Socket, 二进制包传递
HTTP, 是基于 TCP 上面的一层文本协议
chengxiao
2018-11-26 15:34:11 +08:00
@xpresslink 感谢,其实问这个问题是因为现在想用 docker 来部署,想把 docker+uwsgi 放一个容器,然后 nginx 单独一个容器,似乎这样部署就只能用 http 了
allen0125
2018-11-26 16:33:11 +08:00
在文档里面看到一句
Using Unix sockets instead of ports
So far we have used a TCP port socket, because it ’ s simpler, but in fact it ’ s better to use Unix sockets than ports - there ’ s less overhead.

docker 部署的话,容器里面如果没有 nginx,静态文件怎么搞啊。
Neojoke
2018-11-26 17:13:58 +08:00
生产环境百分之九十九是 unix Socket 的方式,ngnix 是做反向代理用的,因为 uwsgi 不具备路由、过滤等方向代理功能,但论执行效率,可以做性能测试,如果是 http 协议的话,性能是没有 unix Socket 方式好的
xpresslink
2018-11-26 18:25:33 +08:00
@chengxiao 用 docker 来部署一般用 TCP socket,如果容器用主机网络模式,用个不冲突的端口号就可以了。
chengxiao
2018-11-26 21:51:36 +08:00
@allen0125 静态文件可以挂载出来的吧
wonderay
2018-11-27 08:25:48 +08:00
@allen0125 可以共享 volume

@chengxiao 也可以用 socket

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/511524

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX