Python 多个客户端连接到Tornado服务器

Python 多个客户端连接到Tornado服务器,python,websocket,tornado,Python,Websocket,Tornado,我使用这段代码从一个源获取一个连续的无限数据流,对其进行处理,然后将处理后的无限数据流发送到连接到我的服务器的客户端。问题是tornado只支持一个websocket连接,但我想将数据转发到连接到服务器的所有客户端。如何支持多个客户端 import tornado.httpserver import tornado.websocket import tornado.ioloop import tornado.web class WSHandler(tornado.websocket.WebSo

我使用这段代码从一个源获取一个连续的无限数据流,对其进行处理,然后将处理后的无限数据流发送到连接到我的服务器的客户端。问题是tornado只支持一个websocket连接,但我想将数据转发到连接到服务器的所有客户端。如何支持多个客户端

import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web

class WSHandler(tornado.websocket.WebSocketHandler):
def open(self):
    print 'new connection'
    self.write_message("Hello World")

def readData(self):
    while True:
       --continue generating data--
       self.write_message(generated data)

def on_message(self, message):
    print 'message received %s' % message

def on_close(self):
  print 'connection closed'


application = tornado.web.Application([
(r'/ws', WSHandler),
])


if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()

是一个我认为与您正在尝试做的事情相匹配的示例。

是一个我认为与您正在尝试做的事情相匹配的示例。

您在“生成数据”部分到底在做什么以及如何做?我正在连接一个TLS服务器,它以xml格式输出无限的数据流。我正在将需要的数据处理为JSON。这就是生成数据的部分。我想做的是将数据发送到连接到我的websocket的所有客户端,但我不想为连接到我的websocket的每个客户端单独连接到我的TLS服务器。一个到TLS服务器的连接和生成的数据被发送到连接到websocket的所有客户端。如果需要任何其他细节,请告诉我。:)您在“生成数据”部分具体做了什么,以及如何做?我正在连接一个TLS服务器,它以xml格式输出无限的数据流。我正在将需要的数据处理为JSON。这就是生成数据的部分。我想做的是将数据发送到连接到我的websocket的所有客户端,但我不想为连接到我的websocket的每个客户端单独连接到我的TLS服务器。一个到TLS服务器的连接和生成的数据被发送到连接到websocket的所有客户端。如果需要任何其他细节,请告诉我。:)另外,如果我想在前一行包含特定关键字的情况下读取额外的行,如果我想忽略不包含特定关键字或一组关键字的行,该怎么办?就像现在的代码一样,它只是逐行读取和处理。您必须修改process方法来跟踪某些事件,以便它们影响后续行的处理。要删除某些输入,您需要修改流读取器基类,它在其中调用write_message。经过一定时间后,代码继续运行,但不从源服务器读取任何数据。我使用调试器进行检查,它似乎卡在了ioloop.py中。我如何克服这个问题?现在Tornado已经是v4了,并且推荐使用新的asyncio模块,我把它移到了Python3.4,它打破了这段优秀的代码。现在,您必须对“utf-8”中的所有字符串进行编码,这些字符串将出现在您的“random”stuff例程\self.stream.write(output.encode(“utf-8”))\…此外,如果我想在前一行包含特定关键字时读取额外的一行,如果我想忽略不包含特定关键字或一组关键字的行呢?就像现在的代码一样,它只是逐行读取和处理。您必须修改process方法来跟踪某些事件,以便它们影响后续行的处理。要删除某些输入,您需要修改流读取器基类,它在其中调用write_message。经过一定时间后,代码继续运行,但不从源服务器读取任何数据。我使用调试器进行检查,它似乎卡在了ioloop.py中。我如何克服这个问题?现在Tornado已经是v4了,并且推荐使用新的asyncio模块,我把它移到了Python3.4,它打破了这段优秀的代码。您现在必须对“utf-8”和“utf-8”之间的所有字符串进行编码,这些字符串将出现在\u random\u stuff例程\self.stream.write(output.encode(“utf-8”)\。。。。。