广播系统
广播系统
简介
Masonite了解开发人员对构建现代Web应用程序的需求,因此Masonite 1.4+附带了WebSocket支持。有了新的服务提供商,配置文件以及对 pusher
和 ably
驱动程序的支持,现在可以快速,轻松地完美支持WebSocket。
配置
所有广播配置位于 config/broadcast.py
文件中. 只有两个选项: DRIVER
和 DRIVERS
. DRIVER
应该保存要使用的驱动程序的值 ,你想要使用,例如pusher
:
DRIVER = 'pusher'
并且DRIVERS
应该配置下面的数据:
DRIVERS = {
'pusher': {
'app_id': os.getenv('PUSHER_APP_ID', '29382xx..'),
'client': os.getenv('PUSHER_CLIENT', 'shS8dxx..'),
'secret': os.getenv('PUSHER_SECRET', 'HDGdjss..'),
},
'ably': {
'secret': os.getenv('ABLY_SECRET', 'api:key')
}
}
每个驱动程序可能需要自己的单独设置值,因此请确保查看所用驱动程序的文档。对于 ably
和 pusher
驱动程序,这些文档是您必须要了解的。
确保 DRIVER
设置中的键在 DRIVERS
设置中具有相应的键。
Pusher
如果您使用的是Pusher,则将需要安装Pusher库:
$ pip install pusher
Ably
如果您使用的是Ably,则需要安装ABLE库:
$ pip install ably
用法
由于我们有一个ServiceProvider
服务提供者,负责为我们处理容器绑定,因此现在可以简单地通过将Broadcast
传递到控制器方法中的参数列表中,如下所示:
from masonite import Broadcast
def show(self, broadcast: Broadcast):
print(broadcast) # 打印驱动类
我们也可以随时更改驱动程序:
from masonite import Broadcast
def show(self, broadcast: Broadcast):
print(broadcast.driver('ably')) # 打印 ably 驱动类
所有驱动都具有相同的方法,因此不必担心不同的驱动具有不同的方法。
频道
我们可以通过下面的代码,通过 WebSocket发送数据 :
from masonite import Broadcast
def show(self, broadcast: Broadcast):
broadcast.channel('channel_name', 'message')
像这样! 我们刚刚向订阅 channel_name
频道的所有人发送了一条消息。
我们还可以发送字典:
from masonite import Broadcast
def show(self, broadcast: Broadcast):
broadcast.channel('channel_name', {'message': 'hello world'})
我们还可以通过添加消息渠道列表将消息发送到多个渠道:
from masonite import Broadcast
def show(self, broadcast: Broadcast):
broadcast.channel(['channel1', 'channel2'], {'message': 'hello world'})
这会将消息广播到两个频道。我们可以根据需要将尽可能多的频道添加到列表中.
Masonite还具有一个可选的第三个参数,即事件名称:
from masonite import Broadcast
def show(self, broadcast: Broadcast):
broadcast.channel('channel_name', 'message', 'subscribed')
它将把事件传递给接收WebSocket的任何人.
更改驱动
您还可以即时更改驱动:
from masonite import Broadcast
def show(self, broadcast: Broadcast):
broadcast.driver('ably').channel('channel_name', 'message', 'subscribed')
或者您可以显式指定类:
from masonite.drivers import BroadcastAblyDriver
from masonite import Broadcast
def show(self, broadcast: Broadcast):
broadcast.driver(BroadcastAblyDriver).channel('channel_name', 'message', 'subscribed')
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。