如何使用龙卷风发送 HTTP 广播消息?
How can I send HTTP broadcast message with tornado?
我有一个 tornado
HTTP 服务器。
如何使用 tornado
服务器实现 broad-cast
消息?
是否有任何功能,或者我只需要向所有客户端循环发送普通的 HTTP 消息。
我想如果我发送正常的 HTTP 消息,服务器应该等待响应。
好像不是broad-cast
的概念。
否则,我需要另一个第三方选项 broad-cast
?
请给我任何实施 broad-cast
消息的建议。
简短回答:您可能对 WebSockets 感兴趣。 Tornado 似乎对此有支持。
更长的答案:我假设您指的是从服务器向所有客户端广播。
不幸的是,由于考虑的方式,这在 HTTP/1.1 中在概念上是不可行的。客户端向服务器请求一些东西,服务器响应,独立于其他所有。
此外,虽然客户端和服务器之间没有请求,但可以说这种关系根本不存在。因此,如果您要广播,您将错过当前未与服务器通信的客户端。
诚然,事情并没有那么简单。许多客户端在与服务器通信时保持长期的 TCP 连接,并在其上传输 HTTP 请求。此外,单个请求不是原子的,响应是以数据包的形式发送的。人们在 WebSockets 之前实现了 server-push/long-polling 或使用这种方法实现了 HTTP/2,但现在有更好的方法来解决这个问题。
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
我有一个 tornado
HTTP 服务器。
如何使用 tornado
服务器实现 broad-cast
消息?
是否有任何功能,或者我只需要向所有客户端循环发送普通的 HTTP 消息。
我想如果我发送正常的 HTTP 消息,服务器应该等待响应。
好像不是broad-cast
的概念。
否则,我需要另一个第三方选项 broad-cast
?
请给我任何实施 broad-cast
消息的建议。
简短回答:您可能对 WebSockets 感兴趣。 Tornado 似乎对此有支持。
更长的答案:我假设您指的是从服务器向所有客户端广播。 不幸的是,由于考虑的方式,这在 HTTP/1.1 中在概念上是不可行的。客户端向服务器请求一些东西,服务器响应,独立于其他所有。
此外,虽然客户端和服务器之间没有请求,但可以说这种关系根本不存在。因此,如果您要广播,您将错过当前未与服务器通信的客户端。
诚然,事情并没有那么简单。许多客户端在与服务器通信时保持长期的 TCP 连接,并在其上传输 HTTP 请求。此外,单个请求不是原子的,响应是以数据包的形式发送的。人们在 WebSockets 之前实现了 server-push/long-polling 或使用这种方法实现了 HTTP/2,但现在有更好的方法来解决这个问题。
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