-
Notifications
You must be signed in to change notification settings - Fork 3
biohub.core.websocket
hsfzxjy edited this page Aug 8, 2017
·
2 revisions
本模块封装了与 websocket 有关的所有操作。
一个 handler name 是一个字符串,可以与 多个 handler 建立对应关系。前端发出的每一条消息必须指定一个 handler name。注意 __connect__
被视为保留名称。
一个 message 代表一条来自前端的消息。message 有 handler_name
和 data
属性。
一个 handler 是一个函数,只接受一个参数 message
。
示例:
from biohub.core.websocket import register_handler, register_connected
# 此处 'test' 是 handler name, test_handler 是 handler, message 对象包含来自前端的数据。
# 假设前端发送了 { 'handler': 'test', 'data': 'hello' }
@register_handler('test')
def test_handler(message):
print(message.handler_name, message.data) # test hello
print(message.user) # 发起连接的 user
message.reply('world')
# 回复一条消息,实际上是发送了 { 'handler': 'test', 'data': 'world' }
# 此 handler 会在 websocket 连接建立时触发
@register_connected
def connected_handler(message):
print(message.handler_name) # __connect__
with message.patch_handler_name('test'): # 暂时改变 handler_name
message.reply('welcome')
# 实际发送了 { 'handler': 'test', 'data': 'welcome' }
handler 外发送消息的示例:
from biohub.core.websocket.tool import Broadcaster
b = Broadcaster('test') # 'test' 为 handler name
class Article(models.Model):
# ...
def save(self):
b.broadcast_user(self.author, 'created!') # 发给特定用户
b.broadcast_user([self.author], 'created!') # 发给若干用户
b.broadcast('created!') # 发给所有用户
原始数据,等价于 dict(data=message.data, handler=message.handler_name)
原路回应一条消息。
全局广播消息。
发送消息给指定用户。
发送消息给一组用户。
返回一个 context manager,在此上下文中,message.handler_name
被修改为指定的 handler_name
。
全局广播消息。
发送消息给指定用户。