Closed Gaubee closed 4 months ago
✨ 加入 cbor 的支持,在原生上会有更好的编码性能和效率,在 js 侧可以省去?
任何环境下抽象出来的ipcPool底层的消息通道我们统一称为 endpoint(端点); 任何形式的端点都需要支持反压,如果不支持那么就在协议上进行软支持,同时要确保性能。
比如说MessageChannel本身并不支持反压,它底层的设计是一个UnlimitChannel,那么我们就需要构建一些特殊的信号来模拟反压; 这里建议用 双MessageChannel 来实现,一个用来传输数据,一个用来传输控制信号;就在握手阶段完成构建与连接。
双通道的在kotlin这里可以使用 select-on-send 来改进写法
- 安卓dwebview的MessageChannel的port已经修改为androidx.webkit.WebMessagePortCompat,支持传输ByteArray。
ByteArray的支持需要进一步严谨的测试,包括兼容性测试和性能测试两部分
任何环境下抽象出来的ipcPool底层的消息通道我们统一称为 endpoint(端点); 任何形式的端点都需要支持反压,如果不支持那么就在协议上进行软支持,同时要确保性能。
比如说MessageChannel本身并不支持反压,它底层的设计是一个UnlimitChannel,那么我们就需要构建一些特殊的信号来模拟反压; 这里建议用 双MessageChannel 来实现,一个用来传输数据,一个用来传输控制信号;就在握手阶段完成构建与连接。
双通道的在kotlin这里可以使用 select-on-send 来改进写法
双通道的构建对于开发者可能是负担,因为使用create的时候,还需要传递两个通道(channel,messageChanel,ByteChannel),因此想根据上述所说通过select-on-send 来复用通道进行(close/pause/ping/pong) 等信号发送,但是这样没有对数据和信号进行区分,可能也不是好的方案。
或者是IpcPool.create 创建消息通道之后,再通过fork 创建信号通道。
任何环境下抽象出来的ipcPool底层的消息通道我们统一称为 endpoint(端点); 任何形式的端点都需要支持反压,如果不支持那么就在协议上进行软支持,同时要确保性能。 比如说MessageChannel本身并不支持反压,它底层的设计是一个UnlimitChannel,那么我们就需要构建一些特殊的信号来模拟反压; 这里建议用 双MessageChannel 来实现,一个用来传输数据,一个用来传输控制信号;就在握手阶段完成构建与连接。 双通道的在kotlin这里可以使用 select-on-send 来改进写法
双通道的构建对于开发者可能是负担,因为使用create的时候,还需要传递两个通道(channel,messageChanel,ByteChannel),因此想根据上述所说通过select-on-send 来复用通道进行(close/pause/ping/pong) 等信号发送,但是这样没有对数据和信号进行区分,可能也不是好的方案。
或者是IpcPool.create 创建消息通道之后,再通过fork 创建信号通道。
fork出来的IPC是不透明的,endpoint只确保它的消息能到,但不能确保它的消息什么时候到。 因此控制信号必须在底层endpoint这里解决。 这是一个一劳永逸的方案,在endpoint这里抽象地解决掉这个问题已经是心智负担最低的方案了。
设计两种通信模式:一种安全的通信和一种不安全的通信类型TCP和UDP
close of 83e0fbc0c1e01bc88a7790560d24f50adfa42022