正在编写一个网络协议实现及其前端,主要是关于收发文件的。因为前端可能是 Dart ( Flutter )、Swift 或 TypeScript ( ArkTS ),一方面不想重复造轮子,另一方面是 Dart 的性能不够高,实测相比原生,用 Dart 实现协议对传输速度有很大影响,所以决定把后端的协议实现抽象成几个 FFI 接口,用 C++ 或者 Rust 来写,包装成 .so
,允许前端调用。
但是,因为目前想把协议库设计为直接处理各种网络(以及文件) I/O ,这些耗时操作必然不应该阻塞调用者的主线程(另外,Dart 和 TypeScript 开启新线程也很麻烦,不能要求他们去开)。如果要异步的话,我也不是很清楚具体怎么做比较好。
我目前的想法是,像 MPI 那样设计成:
call_something_nonblocking(&request)
(不阻塞发起请求)wait_req(request)
(阻塞到请求完成)get_req_status_nonblocking(request)
(获取请求的进行状态)或者是:
call_something(&request, callback)
(回调式发起请求。跨语言传递回调是不是比较难实现? TS 似乎不支持跨线程调用 ts 方面的函数。)
不知各位有没有更成熟的设计模式?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.