2019年9月23日月曜日

(便利メモ28) Windows10 自分のパソコンを調べる

python タイマーを考える


トルネードとwebsoketと利用したアプリ

問題点としては、
・WebSocketは、ある時間で通信が切断されるモヨウ(5分ぐらいかな)

サーバー(トルネードで処理)側で、ある時間で切断して対応したが、いまいち。
どうするかだが。

問題はクライアントで勝手に着られると、サーバーはその事を知ることができない。
やはり、あれか!
定期的にクライアントから、意味のないメッセージを送る(使用中ですよ!)
これにより、勝手には切れないはず。

まぁ、ポーリング(監視)があるけど、ホスト側から送ろうか?
これなら、クライアントで切られてもサーバーで後処理ができる。

いや、クライアントからがいいなぁ。
何故ならクライアントが勝手にきれたら
キーボード、マウス入力がなくなったら、おくらない!


WebSocketの基本!
--------------------------------------------------------------------------------- 
ws = new WebSocket("wss://~URL~:ポート番号/識別子");

※トルネードの場合は、識別子で振り分けられる
    app = Application([
        #(r"/", MainHandler),
        (r"/file", FileHandler),
        (r"/識別子", EchoHandler)

        ])


// socket open
ws.onopen = function(){ ... };

// message受信
ws.onmessage = function(msg){ ... };

// 通信終了時・切断時
ws.onclose = function(){...};

// メッセージ送信
$("#btn").click(function(){... ws.send(message); };

--------------------------------------------------------------------------------- 


◆以下で、定期的に接続をチェックするようにしたい

#!/usr/bin/python3

from threading import Timer

class RepeatedTimer(Timer):
  def __init__(self, interval, function, args=[], kwargs={}):
    Timer.__init__(self, interval, self.run, args, kwargs)
    self.thread = None
    self.function = function

  def run(self):
    self.thread = Timer(self.interval, self.run)
    self.thread.start()
    self.function(*self.args, **self.kwargs)

  def cancel(self):
    if self.thread is not None:
      self.thread.cancel()
      self.thread.join()
      del self.thread

if __name__=='__main__':    

  import time

  def hello(message):
    hello.counter += 1
    print(message, hello.counter)
  hello.counter = 0

  for i in range(3):
    t = RepeatedTimer(0.5, hello, ["Hello"])

    t.start()
    time.sleep(5)
    t.cancel()
    print("Done.")
    hello.counter = 0
    


◆参考元

https://ja.stackoverflow.com/questions/24508/python%E3%81%AEthreading-timer%E3%81%A7%E5%AE%9A%E6%9C%9F%E7%9A%84%E3%81%AB%E5%87%A6%E7%90%86%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB