一、基于类的consumer
与django基于类的视图类似,Channels也提供基于类的consumers,这些consumers的类都继承自同一个类BaseConsumer。通过下面的代码可以导入该类:
from channels.generic import BaseConsumer
Channels在处理每个消息时会实例化一个对象,来处理相应的消息。每个类实例都有两个属性,self.message当前处理的消息,self.kwargs定义路由时传递的参数。routings使用route_class来替换route,来实现基于类的consumers的路由。如下:
from channels import route, route_class
from . import consumers
channel_routing = [
route_class(consumers.ChatServer, path=r"^/chat/"),
]
- BaseConsumer
所有Consumer类的基类,但是我们仍然可以直接使用它。
from channels.generic import BaseConsumer
class MyConsumer(BaseConsumer):
method_mapping = {
"channel.name.here": "method_name",
}
def method_name(self, message, **kwargs):
pass
method_mapping是一个字典,定义了Channel_name到方法的路由,进入到路由的消息就会传给相应的方法来处理。
-
WebsocketConsumer
Channels更多的时候是用于websocket,而Channels提供了专门来处理websocket的consumers类:WebsocketConsumer。你可以像下面那样使用它:
from channels.generic.websockets import WebsocketConsumer
class MyConsumer(WebsocketConsumer):
http_user &#