如果我正在构建 WebRTC 应用程序并使用 Selective Forwarding Unit 媒体服务器,这是否意味着我将不需要 STUN / TURN 服务器?
据我了解,STUN 服务器用于客户端发现其公共 IP/端口,而 TURN 服务器用于在客户端无法通过 STUN 直接相互连接时在客户端之间中继数据。
我的问题是,如果我使用公共地址部署我的 SFU 媒体服务器,这是否消除了对 STUN 和 TURN 服务器的需求?由于数据将始终通过 SFU 中继,并且客户端/对等方实际上永远不会直接相互交谈?
但是,我注意到 Kurento(具有 SFU 功能的流行媒体服务器)的安装指南包含有关配置 STUN 或 TURN 服务器的部分。为什么需要 STUN 或 TURN 服务器?
我有一个功能列表,像这样:
def foo(a, b):
# do stuff
return True # or False
def bar(c):
# do stuff
return False # or True
def baz(d, e, f):
# do stuff
return True # or False
Run Code Online (Sandbox Code Playgroud)
而且我想依次调用它们,并且仅在前一个返回时才继续进行下一个True,如下所示:
if foo(1, 2):
if bar(3):
if baz(4, 5, 6):
print("Success!")
Run Code Online (Sandbox Code Playgroud)
现在,我知道如果我所有的函数都接受相同的参数,则可以执行以下操作:
steps = [foo, bar, baz]
if all(func(*args) for func in steps):
print("Success!")
Run Code Online (Sandbox Code Playgroud)
因为all一旦达到False返回值就会短路。但是,它们并不都接受相同的参数。
什么是最干净的方法来实现这一目标?
编辑:感谢您压缩args的建议。在每个函数都返回某个值的更一般的情况下,我想使用前一个函数的返回值(无论它是什么)来决定是否运行下一个函数?每个函数可能还需要先前函数的某些返回值作为参数。