2016-12-09 8 views
1

私はPythonでWebSocketを使用しようとしていますが、私は以前これについて質問しました。しかし、私がすぐに気付いたのは、サーバーに接続していたのは「ワン・オフ」メッセージのためであり、私がやりたいことは常に通知を聞く必要があるということでした。私は次のコードを見ることができますpython websocket clientのドキュメントで :Pythonで長生きのwebsocket接続を作成するには?

import websocket 
import thread 
import time 

def on_message(ws, message): 
    print message 

def on_error(ws, error): 
    print error 

def on_close(ws): 
    print "### closed ###" 

def on_open(ws): 
    def run(*args): 
     for i in range(3): 
      time.sleep(1) 
      ws.send("Hello %d" % i) 
     time.sleep(1) 
     ws.close() 
     print "thread terminating..." 
    thread.start_new_thread(run,()) 


if __name__ == "__main__": 
    websocket.enableTrace(True) 
    ws = websocket.WebSocketApp("ws://echo.websocket.org/", 
           on_message = on_message, 
           on_error = on_error, 
           on_close = on_close) 
    ws.on_open = on_open 
    ws.run_forever() 

事は、私はまだのpythonに非常に新たなんだ、と私は完全にこのコードを理解していない、です。それはサンプルコードであり、私がそれを必要としないことを行うので、私はそれがどのように動作するのか理解したいと思います。例えば、forループが何のために必要であるか、または__name____main__が何のために必要であるかを理解できません。

良い方法がありますか?

おかげで、 サス:)

答えて

1

ザ・ループのためには、おそらくそれだけでHello 0Hello 1Hello 2を出力しますので、あくまでも一例です。

​​は、Pythonインタプリタがモジュールをメインプログラムとして実行しているときにtrueとなります。here.については、いつでもメッセージ、エラー、およびソケットの終了時に使用する関数を割り当てます。それが終わると、WebSocketは永遠に実行されます。だから、

、あなたはこのサンプルコードをコピーして、これらのイベントがoccourいつでも彼らが何をしたいのかやってon_messageon_erroron_closeon_openの機能を変更することができ、独自の長寿命のWebSocketを作成します。メッセージが送信されるたびにon_messageがアクティブになります。エラーが発生するとon_error、WebSocketが閉じるときはon_close、WebSocketが開くときはon_openになります。

+0

よろしく!今、私は分かる!しかし、 "def run * args"と "thread.start_new_thread(run、())"はどうでしょうか?私の推測では、新しいスレッドの作成は実行関数の外にあるので、私はすべてのコードを実行funtionに入れて、 "thread.start_new_thread(run、())"という関数を呼び出します。あれは正しいですか?問題は、なぜ、スレッドを作成する前にws.close()があるのか​​分かりません。それはなぜそこにあるの? – iSasFTW

+0

@iSasFTW 'run'関数が実行される前にスレッドが作成されています。これには' ws.close() 'が含まれています。だから、実際にはスレッドが閉じられる前にスレッドが作成されているので、 '{}'を囲んでいないときにPython構文がちょっと混乱することがあります – Tropic

0

私はそれについての質問をしたい、返すことができるだけでなく、メッセージを印刷しますか?

関連する問題