239144498 / Streaming-Media-Server-Pro

这是一个强大的IPTV源后端服务,具有视频缓冲区功能,程序内置了很多独家频道,不够?你还可以自定义添加电视源;超多功能接口,还可以添加你的代理,并且适合任意平台,非常适合作为家庭影院的IPTV服务!可玩性超高,更多详情点击查看。

Home Page:https://stream.naihe.cf/docs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

docker环境下开启后很快无响应

jin38324 opened this issue · comments

commented

基于本仓库中的代码重新build了docker镜像
服务可以顺利启动,并且可以正常使用一段时间,但是很快(大概3分钟)就会无响应,包括主页都没有响应。
奇怪的是如果是挂载本地app文件夹中的代码启动docker就不会出现这种情况,docker以非后台模式启动也没有出现这种情况。

停滞时,日志总是卡在
INFO 时间戳 - app.api.v2.endpoints.sgtv:call - 第x次尝试获取1
200
然后就不会更新任何活动。
只能重启才能恢复正常。

找不到出错原因。

commented

配置文件中localhost =输入你的ip,具体看教程给出的相关信息https://www.cnblogs.com/1314h/p/16651157.html

commented

已按照文档添加了localhost,但是没有解决问题,症状跟以前一样,只能看几分钟。
我在代码中添加了更多的logger,最后定位到是从数据库获取ts文件这一步有问题,会导致整个服务器没有响应。但是不知道怎么解决。

image

这是日志中能记录的内容,在最后一条会卡住。
1667699887(1)

另外,昨天挂起的服务什么都没动,今天就能打开了,从日志可以看到定时任务有正常执行。所以后端服务应该是一直在跑,但是无法向前端响应。

线程阻塞引起的问题,下一版更新,可以使用channel2等其他接口

commented

现在已经定位到是app.db.dbMysql:is_connected出现问题。
我想请教一下,一开始选择mysql来缓存视频数据的考虑是什么?
mysql实际上只有video表的一组数据,如果把视频存成本地文件,不用数据库,用文件名来检索,对应用会有什么影响?

commented

一开始设计时考虑过存到本地,但是有很多弊端(比如数据共享问题)
如果你愿意的话欢迎PR

dbmysql第32行代码 :

# 通过以下两个方法判断mysql是否连通,以及重连。
def is_connected(self, num=3600, stime=3):
    # num = 28800
    _number = 0
    _status = True
    while _status and _number <= num:
        """Check if the server is alive"""
        try:
            self.connection.ping(reconnect=True)  # ping 校验连接是否异常
            _status = False
        except:
            if self.re_connect():  # 重新连接,成功退出
                _status = False
                break
            _number += 1
            logger.info(f"mysql连接失败,正在第{_number}次重连...")
            time.sleep(stime)  # 连接不成功,休眠3秒钟,继续循环,知道成功或重试次数结束

你把上面代码段替换为上面的运行查看日志看看,应该是一直重连数据库导致的阻塞

commented

已经这样试过了。第一次ping就会阻塞,没有进入循环。

    # 通过以下两个方法判断mysql是否连通,以及重连。
    def is_connected(self, num=3600, stime=3):
        # num = 28800
        _number = 0
        _status = True
        while _status and _number <= num:
            """Check if the server is alive"""
            try:
                logger.info("mysql 开始检查连接")
                self.connection.ping(reconnect=True)  # ping 校验连接是否异常
                _status = False
                logger.success("mysql 连接检查成功")
            except:
                if self.re_connect():  # 重新连接,成功退出
                    _status = False                    
                    logger.success("mysql重新连接成功")
                    break
                logger.warning("mysql重新连接失败:"+str(_number))
                _number += 1                
                time.sleep(stime)  # 连接不成功,休眠3秒钟,继续循环,知道成功或重试次数结束

image

commented

问题已修复