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