我想用Python运行一个程序,它通过web套接字每秒向Tornado服务器发送一条消息。我一直在用websocket客户端的例子
此示例不起作用,因为ws.run_forever()
将停止while循环的执行。
有人能给我一个例子,告诉我如何正确地将它实现为一个线程类,我既可以调用的send方法,也可以接收消息?
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):
pass
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()
while True:
#do other actions here... collect data etc.
for i in range(100):
time.sleep(1)
ws.send("Hello %d" % i)
time.sleep(1)
在他们的github page中有一个这样做的例子。似乎您是从这个示例开始的,并将每秒发送消息的代码从打开的中取出,粘贴到永远运行调用之后,BTW一直运行到套接字断开连接。
也许你对这里的基本概念有意见。总有一个线程专门监听套接字(在本例中,主线程进入run_forever中的循环,等待消息)。如果你想有其他事情发生,你需要另一个线索。
下面是他们的示例代码的另一个版本,其中不使用主线程作为“socket listener”,而是创建另一个线程,并在其中永远运行。我认为这有点复杂,因为您必须编写代码以确保套接字已连接,同时可以使用on_open回调,但也许它可以帮助您理解。
相关问题 更多 >
编程相关推荐