如何发送龙卷风的HTTP广播消息?

时间:2016-08-10 07:18:59

标签: python-2.7 http tornado broadcast

我有一个tornado HTTP服务器。

如何使用broad-cast服务器实现tornado消息?

是否有任何功能,或者我只需要发送所有客户端循环的正常HTTP消息。

我认为如果我发送正常的HTTP消息,服务器应该等待响应。

似乎不是broad-cast的概念。

否则,我需要broad-cast的另一个第三方选项?

请给我任何建议来实施broad-cast消息。

2 个答案:

答案 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