46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
from tornado.ioloop import IOLoop, PeriodicCallback
|
|
from tornado import gen
|
|
from tornado.websocket import websocket_connect
|
|
|
|
|
|
class Client(object):
|
|
def __init__(self, url, timeout):
|
|
self.url = url
|
|
self.timeout = timeout
|
|
self.ioloop = IOLoop.instance()
|
|
self.ws = None
|
|
self.connect()
|
|
PeriodicCallback(self.keep_alive, 20000).start()
|
|
self.ioloop.start()
|
|
|
|
@gen.coroutine
|
|
def connect(self):
|
|
print("trying to connect")
|
|
try:
|
|
self.ws = yield websocket_connect(self.url)
|
|
print("connected")
|
|
self.run()
|
|
except Exception:
|
|
print("connection error")
|
|
|
|
@gen.coroutine
|
|
def run(self):
|
|
while True:
|
|
msg = yield self.ws.read_message()
|
|
if msg is None:
|
|
print("connection closed")
|
|
self.ws = None
|
|
break
|
|
else:
|
|
print("Got a message: " + msg)
|
|
|
|
def keep_alive(self):
|
|
if self.ws is None:
|
|
self.connect()
|
|
else:
|
|
self.ws.write_message("keep alive")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
client = Client("ws://localhost:8888/socket", 5)
|