对于channel layer的方法(包括send()、group_send(),group_add()等)都属于异步方法,这意味着在调用的时候都需要使用await,而如果想要在同步代码中使用它们,就需要使用装饰器asgiref.sync.async_to_sync from asgiref.syncimportasync_to_syncasync_to_sync(channel_layer.send)("channel_name",{...}) 通过chan...
Group.send()将会把这条信息发送到加入到本组的所有reply_channel。 然后, ws_disconnect就很简单了: 1 2 3 4 @channel_session defws_disconnect(message): label=message.channel_session['room'] Group('chat-'+label).discard(message.reply_channel) 这里,在从channel session里查找到聊天室后,我们从聊天...
to_sync应该只包装channel_layer.group_send,而不是整个,即async_to_sync(channel_layer.group_send)...
group_add( 'my_group_name', self.channel_name ) if <condition>: self.channel_layer.group_send( # This does not give any effect. I'm sure the condition is satisfied. 'my_group_name', { 'message' : 'succes' } ) self.accept() self.send(json.dumps({'message' : 'message'})) #...
:return:"""async_to_sync(channel_layer.group_send)(channel_name, {"type": "deploy.run", "text": msg}) 六、生产部署 大多数django的应用部署方式都采用的是nginx+uwsgi进行部署,当django集成channels时候,由于uwsgi不能处理websocket请求,所以我们需要asgi服务器来处理websocket请求,官方推荐使用daphne。下一...
self.send(content) 1. 2. 另外,提供了self.group_send(group_name, content)方法来组播消息,并可以通过self.close()在服务端主动关闭websocket WebsocketDemultiplexer 为了更加方便的使用websocket,channels提供了这个WebsocketDemultiplexer类。这个类的作用需要websocket中json消息传输格式为{"stream":"stream_name","pay...
一个链接(channel)创建时,通过group_add将channel添加到Group中,链接关闭通过group_discard将channel从Group中剔除,收到消息时可以调用group_send方法将消息发送到Group,这个Group内所有的channel都可以收的到 ...
async_to_sync(self.channel_layer.group_send)('1314', {"type":"xx.oo",'message': message})#这个方法对应上面的type,意为向1314组中的所有对象发送信息defxx_oo(self, event): text = event['message']['text'] self.send(text)defwebsocket_disconnect(self, message):#断开链接要将这个对象从 ...
group_name = "agent" async_to_sync(channel_layer.group_send)( "agent", { "type": "user.message", "text": str(current_time)+" 内存利用率已超过: "+str(mem_limit)+"%,当前内存利用率为: "+str(mem)+"%", }, ) return hostname,cpu,mem,net_in,net_out ...
Group('users').send({ 'text': json.dumps({ 'username': message.user.username, 'is_logged_in': False }) }) Group('users').discard(message.reply_channel) 注意我们使用了装饰器来获取 Django session 的用户。同时,所有的消息都必须是 JSON 可序列化的,能够把数据转换为 JSON 字符串。