您的位置:首页 > 编程语言 > Python开发

Python Channels笔记--Deploying

2016-06-19 15:42 666 查看
三步:
1.创建一个channel后端
2.运行worker服务
3.运行接口服务
 
       
可以两种方式设置:路由所有的通信到HTTP/WebSocket接口服务,完全不用WSGI服务;或者只路由WebSockets和长连接到接口服务。前者可以共用URL树,而后者需要设置一个webserver或layer
7 loadbalancer。
 
Settingup a channel backend
 
Runworker servers
       
每个worker服务都是单线程的,所以建议每个核运行一个或两个。开很多worker也安全,因为他们并不占用额外的端口。
Pythonmanage.py runwoker
可以为channel指定worker
python manage.py runworker --only-channels=http.*--only-channels=websocket.*
或让worker忽略消息
python manage.py runworker--exclude-channels=thumbnail
 
Runinterface servers
       
需要ASGI接口服务支持WebSocket。我们推荐使用附带的接口服务,Daphne。它不需要将WebSocket分配到不同的端口或路径(并且能够和你的view代码共享cookies)。
       运行Daphne,只需要提供channel后端,先确保项目中有asgi.py文件。
import
os
from channels.asgi
import get_channel_layer
os.environ.setdefault("DJANGO_SETTINGS_MODULE",
"my_project.settings")
channel_layer
= get_channel_layer()

 
       然后你可以运行Daphne并且提供channel
layer参数。
daphne my_project.asgi:channel_layer
       像runworker一样,应该把它放在初始系统或管理者中确保意外退出时重启。
       如果只运行Daphne而没有worker,所有的请求会悬挂。(runserver
也用Daphne,它在自己的进程中启动worker线程)。

 

Deploying new versions of code
       
一个解耦连接和工作进程的好处是,你可以运行新代码而不需要放弃客户端连接。当有新代码时,只需要重启worker,队列中的消息就会传向新的worker。
       没有必要重启WSGI或WebSocket接口服务,除非你更新了他们或者改变了CHANNEL_LAYER设置。它们没有调用你的任何代码,所有的中间件和代码都运行在consumer上。甚至支持不同Python版本。

 

Running just ASGI
       ASGI和它的权威接口服务Daphne对你来说都很新鲜,所以你可能不希望让所有的信息都通过它(或者你正需要WSGI的特别功能)。
       没关系,Daphne和WSGI可以同时运行。只需要设置loadbalancer或front
HTTP server进程,基于path,domain或upgrade
header。基于path或domain意味着你需要小心地设计WebSocket
URLs;较为理想的是通过upgrade:WebSocket头区分,但并不是所有的软件都支持,他也对长连接没有作用。
       你也可以逆向思考,先默认导到Daphne在有选择地将一些信息路由到WSGI服务。

 

Running on a Paas

 

Scaling Up
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: