python - Tornado web socket communication on demand? -
i'm setting tornado web socket , want use send log data on network. seems work fine, but:
(1) can send data client server arbitrarily once connection established, or have establish new connection , use on_open method print/work sent message every time?
(2) in client (link): why isn't ws.close() called? doesn't seem happen. how can terminate connection then?
(3) there better way identify clients other connection.request.remote_ip?
code: server
import tornado.ioloop import tornado.web import tornado.websocket host = "localhost:2000" class mainhandler(tornado.web.requesthandler): def get(self): self.write("<h3>hello</h3>") class echowebsocket(tornado.websocket.websockethandler): connections = set() ips = set() def open(self): self.connections.add(self) self.ips.add(self.request.remote_ip) print("[master]: websocket opened {}".format(self.request.remote_ip)) def on_message(self, message): print("[client {}]: {}".format(self.request.remote_ip, message)) [con.write_message("[master]: {}".format(message)) con in self.connections] def on_close(self): self.connections.remove(self) self.ips.remove(self.request.remote_ip) print("[master]: websocket closed - client {}".format(self.request.remote_ip)) def setup(): return tornado.web.application([(r"/", mainhandler), (r"/ws", echowebsocket)]) if __name__ == "__main__": s = tornado.httpserver.httpserver(setup()) s.listen(2000) print("------------- info -------------\nstarted server @ {}\nsocket available @ /ws".format(host)) tornado.ioloop.ioloop.current().start()
client:
from tornado.websocket import websocket_connect import tornado import time url = "ws://localhost:2000/ws" class client(object): def __init__(self, url, log=none): self.url = url self.ioloop = tornado.ioloop.ioloop.current() self.conn = none self.log = log def start(self): websocket_connect( self.url, self.ioloop, callback=self.on_connected, on_message_callback=self.on_message) self.ioloop.start() def on_connected(self, f): try: self.conn = f.result() self.conn.write_message("client #1 connected") except exception e: print("[error]: {}".format(e)) self.conn.write_message("error: {}".format(e)) self.ioloop.stop() def on_message(self, message): if message none: print("[error]: no message received") self.conn.write_message("[error]: no message received") self.ioloop.stop() else: print(message) def close(): self.conn.close() if __name__ == '__main__': ws = client(url) ws.start() ws.close()
Comments
Post a Comment