14个版本
0.2.0 | 2020年9月21日 |
---|---|
0.1.0 | 2020年9月12日 |
0.0.12 | 2020年9月6日 |
0.0.9 | 2020年8月22日 |
#3 in #coordinator
每月40次下载
265KB
5.5K SLoC
conec: COordinated NEtwork Channels
高级描述
-
一个协调网络通道实例包含一个协调器和一到多个客户端。
客户端(通过配置)知道协调器的身份(例如,协调器具有TLS服务器证书的主机名)。
客户端使用TLS证书对协调器进行身份验证。默认情况下,客户端生成临时自签名证书;它们也可以配置为使用由协调器信任的CA签名的长期证书。
-
基本抽象是通道,它连接两个实体(客户端或协调器)。通道包含一个双向控制流和零个或多个双向数据流(以下定义)。
每个客户端都共享一个通道与协调器:在启动时,客户端连接到协调器。
客户端可以向协调器请求帮助它们打开到另一个客户端的通道。默认情况下,客户端将尝试使用打洞技术进行NAT穿越;这应该可以工作,除非接收连接的客户端位于对称NAT之后。如果您遇到问题,请在GitHub仓库中提交一个问题!
-
数据流接受来自其作者的(已知长度)消息序列。数据流的读者按顺序接收这些消息。流处理所有消息帧:读取返回完整消息或无内容。不支持乱序读取;请使用多个数据流。
-
控制流用于内部管理连接。用户代码不直接与之交互,除非通过API(例如,在大多数情况下打开数据流涉及到在控制流上发送和接收消息)。
待办事项/功能/未来功能/可能性
- 基本功能
- 通道驱动程序 @ Coord
- 客户端连接:切换握手顺序,尽早检测重复ID
- 通过协调器的代理流
- 功能和改进
- 对于客户端future:使用
map(|x| x.map_err(FooError))
来消除多个unwrap - 通过公钥进行客户端身份验证
-
直接客户端 <-> 协调器流- v0.0.12移除这些 --- 只需使用具有已知名称的新客户端即可!
- 这最终是一个相当简化的解决方案
- v0.0.12移除这些 --- 只需使用具有已知名称的新客户端即可!
- 客户端保持活动状态
- 直接客户端与客户端通道双向通信
- 接收通道监听器
- 客户端之间通道实现
- 在 ichan 中保持通道
- 向 ichan 事件发送以打开新通道
- 向 ichan 事件发送以打开新流
- 端点属于谁?在 ichan 中克隆?(客户端中的选项<>)
- 即使客户端未监听,也允许客户端连接
- 允许客户端关闭与其他客户端的通道
- 似乎某个地方存在一个错误——quinn?rustls?——关闭/重新打开触发
- 调查这个错误!
- 向客户端广播流
-
向协调器广播流?- 不:只需连接一个客户端
- v0.0.12 删除了协调器端的流支持
- 广播:识别发送客户端?
- 添加接口以自动选择客户端之间和代理流
- 允许协调器要求受信任的 CA 为客户端证书
- 在这种情况下,协调器将转发客户端之间流的信任根
- NAT穿越
- 在单独的测试中,穿洞工作。我们能自动测试吗?
- 更多
跟踪
- 仔细检查 Coord/Chan 的关键部分的丢弃通知
- 对于客户端future:使用
- 问题/可能
- 客户端驱动程序 - 这个 API 是什么?整个客户端的一个驱动程序?
- 更好的客户端命名(按公钥命名?但仅当不是临时时...)
- 不。最终,可以通过在协调器处使用客户端证书 CA 来强制执行命名策略
- 客户端与协调器之间的流?(决定:是)
- 将 ControlMsg -> CoCtrlMsg 和 ClCtrlMsg 转换?(决定:否)
- 尽可能从 String 转换为 Bytes 以减少复制?
- 决定:否:原子操作对于 <= 1kB 可能比复制更差
- 错误处理
- 消除
anyhow
,改为无包装错误类型 - 创建 ConecError 类型以提供更好的错误消息
- 切换到 ConecError
- 消除
许可证
Copyright 2020 Riad S. Wahby
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
依赖关系
~17–28MB
~500K SLoC