無限のデータ ストリームをプッシュするサーバーに接続し、データ ストリームを処理して websocket サーバーに送信するコードを tornado で作成しました。問題は、私が実装した方法では、サーバーが特定の機能でブロックされ、WebSocket にデータを提供する機能を終了しないため、それ以上クライアントを受け入れないことです。サーバーへの接続とサーバーから取得したデータを一度だけ処理したいのですが、トルネード サーバーに接続しているすべてのクライアントに処理済みのデータを送信します。誰かが私を助けてくれませんか、それを行う方法がわかりません。データの処理が削除された私のコードは次のとおりです。
import socket
import ssl
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
websockets = []
class WSHandler(tornado.websocket.WebSocketHandler):
def readData(self):
while True:
line = self.ssl_sock.read()
#PROCESS THE READ LINE AND CONVERT INTO RESULTING DATA
if(toSend):
self.write_message(result)
def makeConnection(self):
self.ssl_sock.connect(self.address)
self.readData()
def open(self):
print 'New connection was opened'
self.s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.ssl_sock=ssl.wrap_socket(self.s, cert_reqs=ssl.CERT_NONE)
self.address=('SERVER_ADDRESS',5000)
self.nodes=[]
self.edges=[]
if self not in websockets:
print ('added')
websockets.append(self)
if(len(websockets)==1):
print('executing make conn')
self.makeConnection()
else:
self.readData()
print('executing read data')
def on_message(self, message):
print 'Incoming message:', message
self.write_message("You said: " + message)
def on_close(self):
print 'Connection was 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()