importjson
importlogging
importos
importsignal
importtime
importtornado.ioloop
importtornado.web
importtornado.websocket
fromtornado.options importoptions
frompubnub.pnconfiguration importPNConfiguration
frompubnub.pubnub importPubNub,SubscribeListener
is_closing=False
pb=None
my_listener=None
defsignal_handler(signum,stack):
u""" サーバー停止信号を受信した際にフラグをオンにします."""
globalis_closing
logging.info("exiting...")
is_closing=True
deftry_exit():
u""" サーバー停止フラグがオンの場合にインスタンスを停止します. """
globalis_closing
ifis_closing:
# clean up here
tornado.ioloop.IOLoop.instance().stop()
logging.info("exit success")
classMainHandler(tornado.web.RequestHandler):
u""" メイン処理 """
definitialize(self):
logging.info("initialize")
defget(self):
self.render("index.html",title="Pythonサンプル")
classSendWebSocket(tornado.websocket.WebSocketHandler):
defopen(self):
logging.info('SendWebSocket IP:'+self.request.remote_ip)
self.ioloop=tornado.ioloop.IOLoop.instance()
self.send_websocket()
defon_close(self):
print("Session closed")
globalpb
globalmy_listener
pb.unsubscribe().channels(['lightning_ticker_BTC_JPY','lightning_ticker_FX_BTC_JPY']).execute()
my_listener.wait_for_disconnect()
defcheck_origin(self,origin):
returnTrue
defsend_websocket(self):
self.ioloop.add_timeout(time.time()+1,self.send_websocket)
ifself.ws_connection:
globalpb
globalmy_listener
# Bitflyer の キーを設定してインスタンスを生成、
# リスナーを追加
pnc=PNConfiguration()
pnc.subscribe_key="sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f"
pnc.ssl=False
pb=PubNub(pnc)
my_listener=SubscribeListener()
pb.add_listener(my_listener)
# チャンネルの設定
pb.subscribe().channels(['lightning_ticker_BTC_JPY','lightning_ticker_FX_BTC_JPY']).execute()
my_listener.wait_for_connect()
# BTC-FX/JPY の結果を取得
fx_result=my_listener.wait_for_message_on('lightning_ticker_FX_BTC_JPY')
fx_data=fx_result.message
message=json.dumps(fx_data)
logging.info(message)
self.write_message(message)
app=tornado.web.Application([
(r"/",MainHandler),
(r"/ticker",SendWebSocket)
],
template_path=os.path.join(os.getcwd(),"templates"),
static_path=os.path.join(os.getcwd(),"static"),
js_path=os.path.join(os.getcwd(),"js"),
)
if__name__=="__main__":
tornado.options.parse_command_line()
signal.signal(signal.SIGINT,signal_handler)
app.listen(8888)
logging.info("server started")
tornado.ioloop.PeriodicCallback(try_exit,100).start()
tornado.ioloop.IOLoop.instance().start()
ディスカッション
コメント一覧
まだ、コメントがありません