GraphQL中支持数据流返回的Mutation返回类型选型及实现示例咨询
GraphQL中支持数据流返回的Mutation返回类型选型及实现示例咨询
各位好,我现在在GraphQL接口开发里遇到了一个棘手的问题,想请教下大家:
我需要实现一个Mutation接口,用来向客户端返回音视频文件的数据流,比如下面这个示例里的streamAudioFile mutation,我完全不确定应该用什么类型作为返回值?如果有NodeJS或者其他语言的实际实现示例,也麻烦分享一下:
mutation { streamAudioFile(id: ID!): WhatGoesHere }
我自己先研究了两个常见的GraphQL特性,但感觉都不匹配我的需求,想确认下是不是判断正确:
关于@stream指令
我之前看过@stream指令的官方文章,但仔细了解后发现它的设计场景和我要的完全不同——它是针对列表型数据的分段加载,用来渐进式返回批量数据,和文件流的持续字节输出不是一回事,应该不适用对吧?
关于Subscriptions(订阅)
订阅方案我也排除了,主要有几个硬伤没法解决:
- 晚连接的订阅者只能获取到连接之后的数据流,之前的数据包会丢失,没法完整获取整个文件流
- 多客户端之间没法复用同一个数据流,会造成大量资源浪费
- 最核心的是,订阅的设计初衷是处理实时事件推送,根本不是为文件流这类静态(或预生成)的数据流场景设计的
最后补充下我的实际业务场景,方便大家给出更贴合的建议:
我是在NestJS项目里开发这个功能,项目属于smart-novel仓库的一部分。具体需求是:当客户端调用generateChapterAudio这个Mutation时,我需要把生成好的章节TTS(文本转语音)音频流直接返回给客户端。
备注:内容来源于stack exchange,提问作者Mohammad Jawad Barati
相关产品推荐
相关产品推荐

