0
我已经编写了龙卷风代码,连接到推送无限数据流,处理数据流并将其发送到websocket服务器上的服务器。 问题是,我实现它的方式服务器成为封锁在一个特定的功能,并不接受更多的客户,因为它永远不会退出数据提供给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()
我读了你发送的例子。我不完全明白。这家伙如何连接到API并获取数据? – SinnerShanky
他将所有已连接的客户端存储在'cl'列表中。每当调用'api'方法时,他可以在那里处理数据,然后遍历所有连接到服务器'cl'的客户端,并向所有客户端发送响应,这正是您想要实现的目标? – dm03514
我明白了。在我的情况下,我连接到我的TLS服务器,该服务器不断发出通过此webSocket处理程序处理并发送出去的数据流。在我的情况下,我应该如何调用无阻塞地读取和处理数据而不阻塞服务器的函数? – SinnerShanky