用base.socketIO.wait()来获取实时更新时,会停止运行,且没有任何报错和提示。

程序运行一段时间就会断开连接(SeaTable SocketIO connection dropped),然后会自动重连两次,第三次断连时程序就会结束,没有返回任何提示或错误。


请问一下有人遇到过这种情况吗?最后是如何解决的呢?感谢。

看到另一个帖子里讲,可以可以重写 ‘connect’, ‘disconnect’ 等事件(类似重写 UPDATE_DTABLE),实现自定义触发操作。
seatable/seatable-api-python/blob/master/seatable_api/socket_io.py

class SocketIO(object):
    def __init__(self, base):
        self.base = base
        self.sio = SIO(request_timeout=base.timeout)
    def __str__(self):
        return '<SeaTable SocketIO [ %s ]>' % self.base.dtable_name
    def _connect(self):
        self.sio.on('connect', self._on_connect)
        self.sio.on('disconnect', self._on_disconnect)
        self.sio.on('io-disconnect', self._on_io_disconnect)
        self.sio.on('connect_error', self._on_connect_error)
        self.sio.on(UPDATE_DTABLE, self.on_update_dtable)
        self.sio.on(NEW_NOTIFICATION, self.on_new_notification)
        self.sio.connect(self._dtable_ws_url())
    def _dtable_ws_url(self):
        return self.base.dtable_server_url + '?dtable_uuid=' + self.base.dtable_uuid

是在_on_disconnect方法中加入

self._refresh_jwt_token()
self.sio.connect(self._dtable_ws_url())

对吗?这样可以使程序不停止运行吗?

原帖:实时获取数据更新通知会断线和挂掉

暂时采用以下方法,好像可以实现重运行:

# 在前面已经有过一次base.auth(with_socket_io=True)
if __name__ == '__main__':
    base.socketIO.on(UPDATE_DTABLE, on_update)
    log.info('>>>>>监听seatable的更新任务开始>>>>>>>>>>>')
    base.socketIO.wait()
    log.info('>>>>>监听seatable的更新任务结束<<<<<<<<<<<')
    while True:
        time.sleep(3)
        base.auth(with_socket_io=True)
        base.socketIO.on(UPDATE_DTABLE, on_update)
        log.info('>>>>>监听seatable的更新任务开始>>>>>>>>>>>')
        base.socketIO.wait()
        log.info('>>>>>监听seatable的更新任务结束<<<<<<<<<<<')

继续观察中