问题标签 [grpc-swift]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - GRPC-Swift 从客户端发送 HTTPProtocolVersion
我正在为客户端-服务器应用程序尝试 GRPC-Swift。我在客户端和服务器端都使用 GRPC-Swift 客户端是一个 iPhone 应用程序,我在 iPhone 模拟器上尝试过。
我关注了客户端流式 RPC 的链接。当我从客户端向服务器发送消息时,我在服务器的控制台中收到以下错误消息,
从服务器中
HTTPProtocolSwitcher.swift
在函数内部func channelRead(context: ChannelHandlerContext, data: NIOAny)
,它正在检查HTTPProtocolVersion
,但它丢失了。
如何从客户端代码发送 HTTPVersion?
更新:
客户代码
ios - 当 iOS 应用程序进入后台时,gRPC 服务器停止接收请求
我想在我的 iOS 应用程序中运行一个 gRPC 服务器,而我的应用程序可能在后台运行了很长时间。App 在前台模式下可以正常工作,但在后台模式下,gRPC Server 不会响应任何 Client 连接。一旦 App 回到前台,它将再次工作。
如果我在主线程上启动服务器,一切正常。但我不想阻塞我的主线程。
任何帮助将不胜感激!
ios - gRPC-Swift 有时有 GRPCStatus - 取消
我是 gRPC 的新手并使用pod gRPC-Swift
version 1.0.0-alpha.21
。有时我的回复中有一个错误 -error.localizedDescription
是“操作无法完成。(GRPC.GRPCStatus 错误 1。)”,我注意到这errorCode = 1
意味着“操作被取消,通常由调用者取消。”,但我不知道为什么会这样。这是我的代码:
我会很感激任何想法。
swift - 客户端崩溃后无法重新连接到 gRPC 服务器
我做了很多研究,但找不到解决 gRPC 问题的方法:
概括; 在我的 swift gRPC 客户端应用程序崩溃后,没有 gRPC 客户端可以连接到我的 gRPC 服务器(请参阅下面的错误)
我的设置: 我有一个 Swift 前端应用程序和一个 Rust 后端。rust 后端运行一个 gRPC 服务器(tonic)https://github.com/hyperium/tonic一个 rust 客户端(也是 tonic)和一个 Swift 客户端(https://github.com/grpc/grpc-swift)可以连接至。Swift 客户端崩溃后,所有客户端都无法再连接到服务器。
rust 客户端报告:
Error: Status { code: Cancelled, message: "h2 protocol error: protocol error: stream no longer needed" }
迅速的客户报告:
StreamClosed(streamID: HTTP2StreamID(1), errorCode: HTTP2ErrorCode<0x8 Cancel>, location: ".../swift-nio-http2/Sources/NIOHTTP2/HTTP2StreamChannel.swift:820")
我尝试过在服务器中
设置了一个http2 keepalive
,但这并没有做任何事情。我试图通过故意使 rust 客户端崩溃来重现相同的效果——但没有成功。
我什至不确定是要查看 swift-grpc 和 tonic 库还是 grpc 本身(对我来说,看起来服务器故意关闭了流)。
有谁知道我能做些什么来解决这个问题?提前致谢!
ios - 自动化将生成的 proto 文件包含到 Xcode 项目中的过程
我们的 iOS 应用程序目前使用 Google protobuffer gRPC作为我们的 API 层来在应用程序和后端之间进行通信。所以我们.proto
在后端目录中有这些文件,这些文件将由 gRPC-Swift-Plugins 转换为.grpc.swift
文件.pb.swift
,然后由应用程序使用。
这工作正常,但转换的过程非常繁琐,我们希望将整个过程自动化。
以下是我们的做法:
- 删除先前复制的目录,并通过 shell 脚本将所有
.proto
文件从后端(.proto
文件由后端开发人员维护)复制到名为“Protos”的 App 目录 - 我们已经在Compile Sources中设置了构建规则并包含
.proto
文件。按照SO 上的答案中的步骤进行操作
- 每当我们构建项目时,都会
.pb.swift
生成.grpc.swift
并放入“Protos”文件夹下名为“generated”的目录中。
以下是问题:
- 如果后端将新
.proto
文件添加到源目录中,我的脚本只会将文件复制到 Protos 目录中,但不会将新闻文件包含在Compile Sources列表中。 - 与第一个问题类似,我们需要在 Xcode 中手动设置编译源,这意味着如果新开发人员加入我们的团队,他/她也需要再次进行相同的设置。
- 我们有时需要在编码时参考
.grpc.swift
和文件。.ph.swift
但是如果我们将这些文件添加到 Xcode 中并再次构建项目,Xcode 会抱怨这些生成的文件在那里(对不起,我们正在处理私有 repo,因此项目名称和文件名被替换):
多个命令产生'${user_path}/${proto_name}.pb.o':
- 目标“${my_project_name}”(项目“${my_project_name}”)具有 Swift 源文件的编译命令
- 目标“${my_project_name}”(项目“${my_project_name}”)具有 Swift 源文件的编译命令
非常感谢任何答案或意见和建议!
swift - RxSwift refreshToken 使用 retry(when:)
我为网络请求令牌刷新编写了这样的代码。
但是,我得到一个看起来像这样的日志
2021-07-19 16:24:24.208: refreshToken -> 订阅
2021-07-19 16:24:24.494: refreshToken -> isDisposed
2021-07-19 16:24:25.037: refreshToken -> 订阅
2021-07-19 16:24:25.251:refreshToken -> 事件错误(notLogin)
2021-07-19 16:24:25.251:refreshToken -> isDisposed
不知道为什么Refresh Token
isDisposed 没有ON NEXT
这个是偶尔出现的问题,但不知道是什么原因造成的它
的日志输出正常应该是这样的:
2021-07-22 10:04:45.794: refreshToken -> 订阅
2021-07-22 10:04:52.254: refreshToken -> 事件 next(())
2021-07-22 10:04:52.266: refreshToken -> 事件完成
2021-07-22 10:04:52.266: refreshToken -> isDisposed
如果您能帮助我,我将不胜感激。
javascript - React Native Native Module 循环调用直到在 iOS 上崩溃
我正在尝试在 iOS 上的 React Native 中构建一个 gRPC 客户端。
对于上下文:不直接支持 gRPC 的 React Native 必须从 Swift 调用自定义的 Native Module,它会调用 gRPC 并返回值。
gRPC 服务器是一个本地编译的 goLang 模块,它使用该http2server
模块。我没有编写 gRPC 服务器,所以我无法更改它的代码。
看来 React Native 方法正在循环执行本机 gRPC 客户端调用,导致 Golang 的 http2Server 模块崩溃。
这个 gRPC 客户端调用是从按钮onPress()
事件调用的,而不是从循环调用的。我尝试将 gRPC 调用包装在超时测试中,以防止调用过快。
我的 Native 模块有一个如下所示的导出函数:
</p>
我的 React Native 像这样调用原生模块:
Xcode 输出如下所示 </p>
- 看起来 gRPC 客户端正在对 gRPC 服务器进行多次调用。你会看到 React Native 模块发射器在崩溃之前发出了大约 20 次相同的响应
- Golang 的 http2Server 在
handlePing()
通过原生 Swift 模块向 React Native 返回响应后,在方法过程中崩溃。似乎 gRPC 连接已关闭,然后再次尝试关闭,http2server 无法正常处理
这是 Xcode 控制台日志:
当我使用完全相同的 Swift 代码创建一个测试项目,但没有 React Native 前端时,我没有遇到这种崩溃。React Native 以某种方式参与了崩溃行为,可能是由于 Native Module 功能的功能?
有谁知道如何防止这种循环发生?
ios - 如何将 PATH 添加到 ClientConnection gRPC?
我正在使用 grpc 与服务器通信。我使用创建连接
但是在新版本中,连接被移到了https://testHost.com/api,<strong>如何添加 path = api 来连接服务器?
swift - 如何从包含导入的 proto 生成 Swift 文件?
假设我有一个位于 /home/me/project/first/a.proto 中的 .proto 文件。另一个 proto 文件位于 /home/me/project/second/b.proto 中。我希望能够从这些原型生成 swift 文件。b.proto 使用如下导入:
现在我尝试运行:
我收到一条错误消息,上面写着
如何正确使用导入?