一般所谓“全栈开发”就是前后台一起搞,既然 Android 也是 Linux 内核,那么不是也可以当服务器用吗?但是用常规的后台开发语言 PHP、java、nodejs 之类的都不太合适,把 php-fpm 交叉编译成 arm 版的这个有人做过,nodejs 也有安卓版的,但都是提供一个环境让别人去写后台代码,光这个环境就几十兆了,很笨重还不好用。java 倒是有点靠谱,又是 Android 原生语言。只是不太喜欢 java,感觉表达起来太啰嗦。
所以我选择用 C++ 做后台,sqlite 做数据库(自己编译的原生版,不是安卓自带的那个),前端用 vuejs 做 spa,通过 ajax + websocket 与本地的 C++后台交互。
我想写一个商城‘网站’,用户在手机上添加商品,包括价格、文字描述、图片 /视频展示,同一内网中的其它客户端,包括安卓、iphone、PC 端,用浏览器打开这个“运行在安卓”上的商城就可以自助购物,如果直接用微信扫码打开的,就直接用公众号方式支付,如果是在 PC 端打开的,就显示一个二维码,让客户扫码支付。那么这台手机上售出的所有订单和商品信息都存在本地的 sqlite 数据库中,并且可让它支持退款。
客户付的款到哪里去了?那就要让安卓手机的机主可以直接在 app 上开通自己的微信商户并绑定自己的银行卡,那别人在你手机上买东西的钱就由微信转到你银行卡中了。
那么就需要解决几个问题:
<audio><video>
标签,所以没问题。在 http 服务器中加入 range 分段处理即可。就是让客户可以拖动进度条播放那种。然后这样拍脑袋搞出来的东西是这样的(请不要吐槽界面,我美工比较弱):
用wrk压一下看看,在我的一加5t上的结果如下:
get请求:
wrk -t10 -c100 -d30s http://192.168.1.96:12345/
Running 30s test @ http://192.168.1.96:12345/
10 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 24.50ms 54.23ms 664.45ms 97.81%
Req/Sec 578.20 66.91 787.00 87.00%
169020 requests in 30.03s, 171.67MB read
Requests/sec: 5627.78
Transfer/sec: 5.72MB
post json请求订单查询:
wrk -t10 -c100 -d30s -s ./post.lua http://192.168.1.96:12345/get_cli_orders
Running 30s test @ http://192.168.1.96:12345/get_cli_orders
10 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 17.13ms 8.25ms 342.00ms 97.62%
Req/Sec 599.25 45.59 1.06k 87.99%
178558 requests in 30.03s, 22.14MB read
Requests/sec: 5945.60
Transfer/sec: 754.81KB
因为这是用boost asio单线程异步处理的,理论上应该与nodejs单进程的http服务性能差不多。不过对内网商城来说已经够用了。
1
BigDogWang 2019-09-02 22:34:08 +08:00
说实话,佩服。像我现在已经没有动力写这种 Demo 了,感觉有点浮躁了
|
2
jerry12547 2019-09-03 15:38:22 +08:00
有点猛
|
3
hurrytospring 2019-09-05 10:25:48 +08:00
没看懂有啥意义,你的服务器运行在安卓上操作的是哪里的数据呢,本地 sqllite ?在端上就可以直接操作啊,为啥再在本地起服务,然后用服务操作。。
|
4
novato OP @hurrytospring 在端上是可以直接操作,但是不起服务的话,其它浏览器客户端就访问不了。而且 app 的界面是 vuejs 做的,sqlite 读写是用 C++操作的,在界面上点一个按钮就要通过 javascript->java->c++->写入 sqlite ( C 原生编译的),也可以直接 post json 到 C++的 restful 服务操作。实际上两种方式都有用。
|