aboutsummaryrefslogtreecommitdiffstats
path: root/src/py/backend_server.py
diff options
context:
space:
mode:
authorpzread <netfirewall@gmail.com>2013-05-11 11:57:56 +0800
committerpzread <netfirewall@gmail.com>2013-05-11 11:57:56 +0800
commit517796ece5cc21ad24e06438cfeacc9cf770ad64 (patch)
treeef0aa515c16fd0e1fc899ecf8b7ccf4e1cd62a1b /src/py/backend_server.py
parent4b2c34236ee67a44573a538497ecc166f0c65897 (diff)
downloadtaiwan-online-judge-517796ece5cc21ad24e06438cfeacc9cf770ad64.tar
taiwan-online-judge-517796ece5cc21ad24e06438cfeacc9cf770ad64.tar.gz
taiwan-online-judge-517796ece5cc21ad24e06438cfeacc9cf770ad64.tar.bz2
taiwan-online-judge-517796ece5cc21ad24e06438cfeacc9cf770ad64.tar.lz
taiwan-online-judge-517796ece5cc21ad24e06438cfeacc9cf770ad64.tar.xz
taiwan-online-judge-517796ece5cc21ad24e06438cfeacc9cf770ad64.tar.zst
taiwan-online-judge-517796ece5cc21ad24e06438cfeacc9cf770ad64.zip
Test websocket IMC
Diffstat (limited to 'src/py/backend_server.py')
-rw-r--r--src/py/backend_server.py61
1 files changed, 54 insertions, 7 deletions
diff --git a/src/py/backend_server.py b/src/py/backend_server.py
index e32bc12..7f4ce41 100644
--- a/src/py/backend_server.py
+++ b/src/py/backend_server.py
@@ -3,25 +3,42 @@
import socket
import json
import datetime
+import time
import tornado.iostream
import tornado.ioloop
+import tornado.httpserver
+import tornado.websocket
import netio
import imc.nonblock
from imc.proxy import Proxy,Connection,imc_call,imc_register_call
class BackendWorker():
- def __init__(self,center_addr):
+ def __init__(self,center_addr,ws_port):
self.ioloop = tornado.ioloop.IOLoop.current()
self.center_addr = center_addr
-
self.linkclass = 'backend'
self.linkid = None
+ self.ws_port = ws_port
+
+ self._client_linkidmap = {}
def start(self):
self._conn_center()
+ def add_client(self,linkid,handler):
+ self._client_linkidmap[linkid] = {}
+
+ conn = netio.WebSocketConnection(linkid,handler)
+ conn.add_close_callback(lambda conn : self.del_client(conn.linkid))
+ Proxy.instance.add_conn(conn)
+
+ return conn
+
+ def del_client(self,linkid):
+ del self._client_linkidmap[linkid]
+
def _conn_center(self):
def __retry():
print('retry connect center')
@@ -46,7 +63,7 @@ class BackendWorker():
netio.send_pack(stream,bytes(json.dumps({
'linkclass':self.linkclass,
- 'ws_addr':('210.70.137.215',81)
+ 'ws_addr':('210.70.137.215',self.ws_port)
}),'utf-8'))
netio.recv_pack(stream,___recv_info_cb)
@@ -56,15 +73,45 @@ class BackendWorker():
@imc.nonblock.func
def _test_call(self,param):
+ print(time.perf_counter())
ret = (yield imc_call(self.linkid,'/backend/' + self.center_conn.linkid,'test_dst','Hello'))
+ print(time.perf_counter())
print(ret)
@imc.nonblock.func
def _test_dst(self,param):
- return 'Hello Too'
-
-if __name__ == '__main__':
- backend_worker = BackendWorker(('localhost',5730))
+ return param + ' Too'
+
+class WebSocketConnHandler(tornado.websocket.WebSocketHandler):
+ def open(self):
+ pass
+
+ def on_message(self,msg):
+ global backend_worker
+
+ if hasattr(self,'worker_conn'):
+ self.worker_conn.recv_msg(msg)
+
+ else:
+ info = json.loads(msg)
+ self.worker_conn = backend_worker.add_client(info['client_linkid'],self)
+
+ def on_close(self):
+ if hasattr(self,'worker_conn'):
+ self.worker_conn.close()
+
+def start_backend_worker(ws_port):
+ global backend_worker
+
+ http_serv = tornado.httpserver.HTTPServer(tornado.web.Application([
+ ('/conn',WebSocketConnHandler)
+ ]))
+ http_serv.listen(ws_port)
+
+ backend_worker = BackendWorker(('localhost',5730),ws_port)
backend_worker.start()
+if __name__ == '__main__':
+ start_backend_worker(82)
+
tornado.ioloop.IOLoop.instance().start()