收藏
回答

app.json和wx.request设置更大超时时间都无效?

我的前端向后端发起请求,后端处理比较慢,大约得2分钟,默认是60s就断链接,所以我就尝试了两种设置方式延长时间,但是都无效,请大牛解答下,多谢了。

报错:video.ts:116 GET https://www.futuremagic.cn/video/swap?unique_id=mp_o6dZ46weJZyYZt_zmYGchPlNgFzg&room_id=9c41075f590b89d4a86697f2f4c8df07&template_id=3_dancer2.mp4 504 (Gateway Time-out)(env: macOS,mp,1.06.2401020; lib: 3.1.4)

wx.request设置方式:

wx.request({

url: host.video.swap, // 替换为实际的后端接口地址

data: {'unique_id': unique_id,

'room_id': this.data.room_id, 'template_id': this.data.template_id,

},

method: 'GET',

timeout: 300000,

success: (res) => {

if (res.statusCode === 200 && res.data.code === 0) {

if (res.data.res && res.data.res.video) {

// 解码 Base64 编码的视频数据

const decodedVideoData = wx.base64ToArrayBuffer(res.data.res.video);

app.json设置方式:

"pages/festival/festival"

],

"window": {

"backgroundTextStyle": "light",

"navigationBarBackgroundColor": "#fff",

"navigationBarTextStyle": "black"

},

"networkTimeout": {

"request": 300000,

"downloadFile": 300000

},


回答关注问题邀请回答
收藏

2 个回答

  • 小峰
    小峰
    01-27

    你这逻辑不对,这么长的时间,后端应该先直接返回等待结果,然后扔进队列里处理。


    然后小程序端,再轮询去查结果才对

    01-27
    有用 1
    回复 6
    • 沉淀
      沉淀
      01-27
      说的也有道理,也可以改成这个逻辑。那这个设置超时时间的最大时长本身就有限制不能超过2分钟吗
      01-27
      回复
    • 沉淀
      沉淀
      01-27
      请问如果要把这个结果发给多人房间,让多人都收到,应该怎么做好?超时设置怎么才能超过1分钟限制
      01-27
      回复
    • 小峰
      小峰
      01-27回复沉淀
      你这个逻辑自身就不对,超过1分钟的,就不该用短链接的形式。就得按轮询的方式,不然就只能用长链接,websocket,一直通信
      01-27
      回复
    • 小峰
      小峰
      01-27
      而且你这链接,一个请求就2分钟的话,轻微的并发,就支撑不下了。然后你这个超过1分钟,那个URL链接,我用浏览器访问,也是没1分钟就中断了,所以问题应该不是再小程序里,可能再你nginx的配置里
      01-27
      1
      回复
    • 沉淀
      沉淀
      01-28回复小峰
      websocket方案挺好的,我尝试了下,遇到个问题请问怎么解决哈。我尝试建立了一个websocket连接。为啥后台服务结果生成之后,websocket广播broadcast到客户端还是失败了,甚至连微信小程序的onmessage都没有触发,。我的后台服务代码和前端代码粘贴到下面新评论了。
      01-28
      回复
    查看更多(1)
  • 沉淀
    沉淀
    01-28

    后台服务videoswap模块代码是:

    res = requests.get(url=f'{edit_url}/magicapi/v1/festival/faceswap', params=payload, timeout=300)

                logging.info('FaceSwap response returned')

                res = res.json()

                if res['res']['status'] == 0:

                    data = get_storage_value(FESTIVAL_ROOM_INFO, {'room_id': room_id}, {'video': 1, 'video_id': 1})

                    # 使用 Base64 编码将二进制数据转换为字符串

                    encoded_video_data = base64.b64encode(data['video']).decode('utf-8')

                    # 广播视频结果

                    RoomWebSocket.broadcast_message({'image_list': None, 'video': encoded_video_data, 'video_id': data['video_id']})

                    #RoomWebSocket.broadcast_message({'image_list': None, 'video': "video_test", 'video_id': data['video_id']})

                    logging.info('sleep start')

                    await gen.sleep(15)

                    logging.info('sleep done')

                    self.write(json.dumps({'code': 0, 'res': {'video': encoded_video_data, 'video_id': data['video_id'], 'template_type': 'video', 'status': 0}}))


    前端代码是:

    wx.request({

    url: host.video.swap, // 替换为实际的后端接口地址

    data: {'unique_id': unique_id,

    'room_id': this.data.room_id, 'template_id': this.data.template_id,

    },

    method: 'GET',

    timeout: 120000,

    success: (res) => {

    if (res.statusCode === 200 && res.data.code === 0) {

    if (res.data.res && res.data.res.video) {


    01-28
    有用
    回复
登录 后发表内容