You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在REST API运行期间触发bidiStream gRPC API重发消息以触发响应

问题分析与解决方案

你的核心问题是执行顺序逻辑错误:原脚本里REST请求是同步执行的,会一直阻塞到它返回才会运行后续的during块,但REST恰好需要等待gRPC发送消息才会返回——这就形成了死锁:REST等gRPC消息,gRPC消息要等REST执行完才发送。

必须把REST请求和gRPC消息发送改成并发执行,让REST发起后,gRPC的消息能及时发送触发其返回。

修改后的脚本示例

exec(
  fromClientSide
    .connect
    .header(metadataObject.Authorization)(s"Bearer ${metadataObject.TokenKey}")
    .callOptions(CallOptions.DEFAULT.withDeadlineAfter(30, TimeUnit.SECONDS))
    .endCheck(statusCode is Status.Code.OK)
)
.exec(
  fromClientSide.send(WarmUp_Msg)
)
.pause(200)
// 并行执行REST请求和gRPC消息发送,打破死锁
.parallel(
  // 分支1:发起REST请求,会阻塞直到收到响应
  exec(REST_API_HERE),
  // 分支2:短暂等待确保REST已发起,再发送gRPC触发消息
  exec(
    pause(500) // 时间可根据实际接口启动延迟调整
      .exec(fromClientSide.send(request_Msg))
  )
)
// 后续处理gRPC消息确认
.exec(fromClientSide.reconciliate(waitFor = NextMessage))

关键调整说明

  • 用parallel实现并发:parallel块内的两个分支会同时启动,REST请求发起后不需要等待它返回,另一个分支就能立刻执行gRPC消息发送,触发REST的响应。
  • 新增短等待:分支2里的pause(500)是为了避免gRPC消息发送太早,保证REST请求已经成功发起,时间可以根据实际接口的启动速度调整。
  • 简化during逻辑:你的场景只需要一次gRPC消息触发REST返回,所以不用during循环,直接pause + send更直接。如果需要在REST等待期间持续发送消息,也可以把分支2改成这样:
during(10) { // 持续10秒循环发送gRPC消息
  exec(fromClientSide.send(request_Msg))
    .pause(100) // 每隔100毫秒发一次
}

内容的提问来源于stack exchange,提问作者TriNguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:12:44