我对python还是很陌生,最近开始研究python websocket客户端。
因此,它的主要作用是发送消息并基于此执行一些操作。
当前,我正在使用input()
来获取要发送到服务器的数据,但是当input
工作时,我如何接收网络套接字消息。
我尝试在新线程上运行websocket,但是我正在使用无限循环以避免退出,是
import websocket
try:
import thread
except ImportError:
import _thread as thread
import time
import json
# Client Message structure : json --> {"data": "", "operation": "", "watch": ""}
# Server Message Structure : json --> {"status": 0/1 --> error/success , "message": will contain response message }
RED, WHITE, GREEN, END, YELLOW = '\033[91m', '\33[97m', '\033[1;32m', '\033[0m', '\33[93m'
def init(ws):
ws.send(json.dumps({"data":"", "operation":"init"}))
def main(ws):
init(ws)
while True:
try:
data = input()
message = {"operation":operation, "data":data}
ws.send(json.dumps(message))
except Exception as e:
print(e)
except KeyboardInterrupt:
print("User has pressed {0}Ctrl+C{1}".format(RED,END))
print("Exiting ...")
ws.close()
break
def on_message(ws, message):
print("\nNew Message")
recv_msg = json.loads(message)
if recv_msg["status"] == 1:
print("{0}{1}{2}".format(GREEN, recv_msg["message"], END))
else: # Error Message
print("{0}{1}{2}".format(RED, recv_msg["message"], END))
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
def run(*args):
main(ws)
thread.start_new_thread(run, ())
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://127.0.0.1:5000/ws",
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()
以上代码摘自websocket client。
input()
正在阻塞并且websocket
正在其他线程上运行,因此它们的输出重叠,而且我知道这不是执行此操作的正确方法。
查看此处
输入选择应该在底部,但是由于它在两个不同的线程中运行,因此出现同步问题。
看到此websocket client (in go)正常工作,清理输入和相应的输出没有输出重叠,而且没有无限循环。
有什么干净的方法吗?
谢谢
Temporarya
(python noobie)