说明
针对一个以前老的技术架构,技术栈是由C/C++、PHP、Java、jquery、html等一些技术,但是发现开发周期长,而新的语言和技术框架学习后感觉解决了很多以前遇到的问题。 新的技术栈经过调查和学习后选择有如下技术栈:
- Uni-app:小程序必须、可以发布APP,很强大
- Flutter:生态很成熟,适合写和底层交互比较多的APP(之前和uni-app、rn等等做个比较qt开发移动端都试过)
- Golang:高并发服务器(tcp长连接和http的restful api多很有优势)
- Rust:跨平台终端底层库(ffi\jni\wasm等等都可以实现)
- Vue:后台web管理界面,实现前后端分离
注意:技术有限,目前只做了一些调查和实践,golang也可以终端底层,但真没rust好用;rust也可以写服务器,但我没写过,golang也非常够用。
1. Cannot invoke native callback outside an isolate.
Flutter 线程内存不共享,回调函数不能在子线程调用;
1.1 详细说明
Flutter一般通过创建隔离区来调用底层的FFI,但是我传入的回调函数,只能在隔离区的线程中使用,so中再创建线程就不能调用,系统会报Cannot invoke native callback outside an isolate.
1.2 解决方案
不在子线程调用就好了(好像是解决了)
2. Connection Failed: tls connection init failed: Interrupted system call (os error 4)
用ureq基于rustls 的https请求是就会遇到这个问题
2.1 详细说明
(在jni没发现,flutter中有这个问题)
2.2 解决方案
忽略系统中断 github.com/rustls/rust…
while !eof && self.wants_read() {
debug!("read_tls");
match self.read_tls(io) {
Ok(0) => {
eof = true;
debug!("eof");
break;
}
Ok(n) => {
rdlen += n;
debug!("read {} bytes", n);
break;
}
Err(ref err) if err.kind() == io::ErrorKind::Interrupted => {
// nothing to do
debug!("complete_io: read interrupted");
}
Err(err) => {
return Err(err);
}
};