如何停止 Python Websocket 客户端“ws.run_forever”

Posted

技术标签:

【中文标题】如何停止 Python Websocket 客户端“ws.run_forever”【英文标题】:How to stop Python Websocket client "ws.run_forever" 【发布时间】:2016-08-17 11:40:29 【问题描述】:

我正在使用“ws.run_forever”启动我的 Python Websocket,另一个 source 表示我应该使用“run_until_complete()”,但这些函数似乎仅适用于 Python asyncio。

如何停止 websocket 客户端?或者如何在不永远运行的情况下启动它。

【问题讨论】:

【参考方案1】:

在python websockets中,你可以使用“ws.keep_running = False”来停止“永远运行”的websocket。

这可能有点不直观,您可以选择另一个整体上效果更好的库。

下面的代码对我有用(使用 ws.keep_running = False)。

class testingThread(threading.Thread):
    def __init__(self,threadID):
        threading.Thread.__init__(self)
        self.threadID = threadID
    def run(self):
        print str(self.threadID) + " Starting thread"
        self.ws = websocket.WebSocketApp("ws://localhost/ws", on_error = self.on_error, on_close = self.on_close, on_message=self.on_message,on_open=self.on_open)
        self.ws.keep_running = True 
        self.wst = threading.Thread(target=self.ws.run_forever)
        self.wst.daemon = True
        self.wst.start()
        running = True;
        testNr = 0;
        time.sleep(0.1)
        while running:          
            testNr = testNr+1;
            time.sleep(1.0)
            self.ws.send(str(self.threadID)+" Test: "+str(testNr)+")
        self.ws.keep_running = False;
        print str(self.threadID) + " Exiting thread"

【讨论】:

对 Python Websocket 库有什么建议吗? 我认为这不是对这篇文章的真正有效评论,您最好自己创建一个“问题”或使用 Google 查找其他建议。虽然真正的问题是为什么? 我问这个问题是因为您特别指出问题中的库不直观,这表明存在更好的替代方案。 嗯,我明白你的意思,虽然那是很久以前的事了,我还没有深入研究 Python。我最近越来越多地使用 NodeJS,但这可能完全无关紧要。【参考方案2】:

WebSocketApp 上还有一个 close 方法,它将 keep_running 设置为 False 并关闭套接字

【讨论】:

【参考方案3】:

scoket = f'wss://......' # 你可以定义

def on_message(ws, 消息): 打印(消息)

def on_close(ws): print("连接关闭")

ws = websocket.WebSocketApp(scoket, on_message = on_message, on_close = on_close)

ws.run_forever()

【讨论】:

以上是关于如何停止 Python Websocket 客户端“ws.run_forever”的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket单工流 - 客户端如何关闭连接?

完全停止线程龙卷风 WebSocket 服务器

Telethon,全局变量停止 websocket

WebSocket 在 Vue/Node 应用程序中停止工作

如何实现一次只为 1 个客户端提供服务的 WebSocket 服务器

python websocket客户端连接状态 - 如何更新以获得正确的状态?