我试图在Tornado中编写一个流媒体服务器,我希望通过唯一的URL访问多个长时间运行的流,每个流也有一个聊天组件。理想情况下,我希望将每个流都设置为自己的线程并建立新的连接" join"一个线程,以便让人们互相聊天。阅读龙卷风的文档和源代码,我无法找到明确的方法来做到这一点。
以下是我的代码示例:
import json
from tornado.websocket import WebSocketHandler
class StreamHandler(WebSocketHandler):
active_streams = {}
def open(self, stream):
if not stream in StreamHandler.active_streams:
active_streams[stream] = set()
StreamHandler.active_streams[stream].add(self)
def on_message(self, message):
message = json.loads(message)
stream = message['hash']
data = message['data']
for conn in StreamHandler.active_streams[stream]:
conn.write_message(data)
app = Application([
(r'/s/(.*)/sock', StreamHandler)
])
上面的代码的工作原理是我可以为每个流提供不同的URL,并将消息发送到该特定流中的其他连接,但我不确定这是否是实现我想要的最佳方式。
我正在考虑扩展我的代码以使某些ThreadFactory
能够为新流提供线程,但我真的不知道如何去做。
对我的思路和/或现有实施的任何反馈都将不胜感激。