我有一个tornado
HTTP服务器。
如何使用broad-cast
服务器实现tornado
消息?
是否有任何功能,或者我只需要发送所有客户端循环的正常HTTP消息。
我认为如果我发送正常的HTTP消息,服务器应该等待响应。
似乎不是broad-cast
的概念。
否则,我需要broad-cast
的另一个第三方选项?
请给我任何建议来实施broad-cast
消息。
答案 0 :(得分:1)
简短回答:您可能对WebSockets感兴趣。龙卷风似乎对此有所支持。
更长的答案:我假设您指的是从服务器向所有客户端广播。 不幸的是,由于它的思维方式,在HTTP / 1.1中概念上不可行。客户端询问服务器的某些内容,服务器响应,独立于所有其他服务器。
此外,虽然客户端和服务器之间没有请求,但可以说这种关系根本不存在。因此,如果您要进行广播,那么您将错过未与服务器通信的客户端。
当然,事情并非如此简单。许多客户端在与服务器通信时保持长期的TCP连接,并在其上管道HTTP请求。此外,单个请求不是原子的,响应以数据包形式发送。人们使用这种方法在WebSockets或HTTP / 2之前实现了服务器推送/长轮询,但现在有更好的方法可以解决这个问题。
答案 1 :(得分:1)
Tornado中没有广播消息的内置概念。 Tornado附带的websocket聊天演示演示了如何遍历发送消息的客户端列表:
def send_updates(cls, chat):
logging.info("sending message to %d waiters", len(cls.waiters))
for waiter in cls.waiters:
try:
waiter.write_message(chat)
except:
logging.error("Error sending message", exc_info=True)
请参阅https://github.com/tornadoweb/tornado/blob/master/demos/websocket/chatdemo.py