Repository navigation
feat(swift): 远程运行时 listen: 与 dial:,一致性的 Swift 列(#387) - #496
Merged
Merged
Conversation
- 监听(Remote/Listen.swift):Network.framework 的 NWListener(ws / wss),升级与帧由 SDK 自己处理(Remote/WebSocket.swift),每种拒绝有自己的状态码(404 / 401 / 403 / 400,协议拒绝说明升级哪一端);非回环必须 wss(RUTIS_CERT / RUTIS_KEY,EC 或 RSA,PKCS#8 / SEC1 / PKCS#1);令牌常量时间比较;心跳;一次一个控制方,新连接接管(4002) - 拨出(Remote/Dial.swift):URLSessionWebSocketTask;RUTIS_TOKEN 作 Bearer,RUTIS_CA 加信任;按状态码 / 关闭码分类重试或停止,退避与 RUTIS_RETRY;每次断开卸载全部行;SIGTERM / Ctrl-C 卸载后以 0 退出;状态行与其他运行时一字不差 - serve:--id / --peer 进入 endpoint 握手;拨出前拒绝非回环 ws:// 与不合法 id - 测试:session_matrix 的 Swift 监听列、dial_conformance 的 Swift 列(8 项)、swift_remote.rs(拒绝状态、帧、心跳、接管、两端 TLS)、rutis-host 的远程 Swift(监听与拨入实例) - 文档:Swift 指南的远程一节、nodes、ci 矩阵
# Conflicts: # docs/ci.en.md # docs/ci.md
# Conflicts: # docs/ci.en.md # docs/ci.md
) - rutis-host dev(Go、Swift):每次构建先打印 `<名字>: building`,成功后 `<名字>: built in 12.3s`;第一次构建(依赖、SDK 的宏)可能要几分钟,等的人看得到进展 - e2e dev_loop:Swift 场景在任何计时步骤前预热构建(swift build --product demo,build_guard 内,报告 first build took Ns);dev 的第一次构建、之后的重建与失败的构建各按 build_guard 等待,其余步骤仍是 30 秒的 hang guard - e2e Host 加 wait_for_within
# Conflicts: # docs/ci.en.md # docs/ci.md
被取消的监听器在自己的 Task 里调用 events-log:调用先发出、随即因 Task 已取消而发 cancel,宿主是否在 cancel 到达前记下 b:cancelled 取决于时序。夹具改为在非结构化 Task 里记日志(保留调用链、不带取消),同 Go 夹具的 context.WithoutCancel。指南写明取消后仍要调用时这样做。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#387(Swift S2)的第二部分,接 #495:Swift 运行时的远程连接
listen:与dial:,以及一致性的 Swift 列。设计:Swift SDK §6.1、S14、§17.3 #12;拨出规则按 远程运行时:拨出与动态接入 §六。基于 #495 的分支,#495 合入后改到 main。监听:
listen:ws://…/listen:wss://…Remote/Listen.swift:Network.framework 的NWListener(TCP,或 TLS 1.2+),绑定后在 stderr 写rutis: listening on <实际地址>。Remote/WebSocket.swift,同 Go 的listen.go):实测 Network.framework 的NWProtocolWebSocket拒绝时一律回 400、也看不到路径,而 rutis 的拨号方按状态码分类(401 / 403 重试,400 停止),所以不用它的 WebSocket 层。rutis.3400,正文是 rutis-bridge 同样的话(this endpoint speaks rutis.3, the dialer offered rutis.99: upgrade this endpoint (the Swift package Rutis of github.com/arcships/rutis)/…: upgrade the dialer)。wss://;wss://要RUTIS_CERT/RUTIS_KEY(PEM;私钥 EC P-256/384/521 或 RSA,PKCS#8 / SEC1 / PKCS#1,只在进程内,不进钥匙串)。RUTIS_HEARTBEAT,默认 10 s / 30 s);一次一个控制方,新连接让旧连接以 4002 关闭、旧租约结束后才问候新的。拨出:
dial:ws://…/dial:wss://…Remote/Dial.swift:URLSessionWebSocketTask(设计 §17.3 feat(core): 设计卸载截止时间及超时后的任务与资源语义 #12),升级被拒的状态码取自任务的response;RUTIS_TOKEN作 Bearer(读后从环境删除),RUTIS_CA在系统根之外加信任。rutis: refused: incompatible (…); stopping,状态 1;其余(含 4002 被接管)→ 退避 0.5 s 翻倍到 30 s、±20 %,会话满 60 s 重置;RUTIS_RETRY供测试缩短。ws://、不合法的--id、不是 ws/wss 的地址(状态 1)。serve
--id/--peer进入 endpoint 握手(协议 3,声明runtime),网络通道必须给--id。测试(本机 macOS 26.6 / Swift 6.3.2)
session_matrixswift_listening_on_a_websocket(新)dial_conformanceswift::*(新列,8 项)swift_remote.rs(新,6 项)listen:wss用 rcgen 证书被 rutis 以 CA 信任连上;dial:wss不信任的证书为 auth-rejected、RUTIS_CA信任后通过 TLSrutis-host --test swift(加 2 项)<运行时名>:<插件>;Swift 拨入宿主的接入点成为实例,断开实例关闭openssl生成的 RSA PKCS#8 证书listen:wssCI
runtimes-swift加dial_conformance swift::与swift_remote;docs/ci矩阵加 Swift 行(会话契约四列、拨出契约)。文档
Swift 指南加“在另一台机器上运行”(中英);
nodes(中英)说明 Go / Swift 二进制都接受dial:/listen:。