Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python WebSocket客户端堆栈溢出重新连接_Python_Class_Websocket_Client_Stack Overflow - Fatal编程技术网

Python WebSocket客户端堆栈溢出重新连接

Python WebSocket客户端堆栈溢出重新连接,python,class,websocket,client,stack-overflow,Python,Class,Websocket,Client,Stack Overflow,我为一个WebSocket客户端创建了一个类,当不间断地断开连接时,它会重新打开。断开几次连接后,我发现Python堆栈溢出 为什么我会有这个问题?我认为它来自于试图重新连接的无限循环,但这是预期的行为 有没有办法避免这个问题?如果是,如何进行?若否,原因为何 如有任何意见,将不胜感激。我希望这能帮助别人 这是我的班级: import websocket import json class MyWebSocketClient(object): def __init__(self,

我为一个WebSocket客户端创建了一个类,当不间断地断开连接时,它会重新打开。断开几次连接后,我发现Python堆栈溢出

  • 为什么我会有这个问题?我认为它来自于试图重新连接的无限循环,但这是预期的行为
  • 有没有办法避免这个问题?如果是,如何进行?若否,原因为何
如有任何意见,将不胜感激。我希望这能帮助别人

这是我的班级:

import websocket
import json

class MyWebSocketClient(object):

    def __init__(self, url):
        self.url = url
        self.connected = False
        self.running = False

    def start(self):
        self.running = True
        self.ws = websocket.WebSocketApp(
            url=self.URL,
            on_open=self.on_open,
            on_message=self.on_message,
            on_close=self.on_close,
            on_error=self.on_error,
        )
        self.ws.run_forever()

    def stop(self):
        self.running = False
        self.ws.keep_running = False

    def send(self, data: dict):
        data = json.dumps(data, separators=(",", ":"), indent=None)
        self.ws.send(data)

    def on_open(self):
        logger.info('Connexion opened')
        self.connected = True

    def on_message(self, data):
        logger.info(f'Data received: {data}')

    def on_close(self):
        logger.info(f'Connection closed')
        self.connected = False
        if self.running:
           self.start()

    def on_error(self, err):
        logger.error(f'Error: {err}')