在app內建web server
这几年在三家企业都使用 app 內建 web server 的技术方案。效果很好。
该方案顾名思义,就是在 app 中加入一个 embed webserver 组件。组件和app运行于同一进程空间。程序启动时,该嵌入式web服务器即自动启动。程序结束时该web服务器也结束。
该方式具有以下优势:
1.定制性好。最早设计该方案是在 2014 年,当时的公司搞了一堆小游戏,都是网页版的,后来要将其包装为 app。这些网页是公司重要资源,不能泄露源码。所以我将其加密压缩成了一个巨大的资源文件!!静态服务器在接收浏览器请求时,从压缩文件中解压解密得到字节流并输出。这个解密的过程在 app 中完成,用户无从得知其格式。这段代码类似于 tomcat 的 filter,使用 native 实现。
2.支持 ajax。在很多浏览器中,使用 file:/// 打开的网页中 ajax 是无法工作的。该方式下浏览器接触的是 http 协议,故可以正常使用 ajax 功能!!
之前还遇到过一个商品描述为 html 代码的场景,html中含有图片信息,这种情形 webview 没有合适的主机地址,图片资源无法打开。我让人以cgi的方式编写了一个特殊的 /echo 代码:webview 将html post 到该 /echo 网址,echo 原封不动的输出该 html,webview 即获得了合法有效的主机地址。最后通过阅读 webview 文档该问题也得到了解决,不过使用嵌入式 web 服务器也是一个行之有效的办法。
3. 通过转发可以成为 remote webserver 的代理服务器。用户在 webview 中对 embed server 提交表单,embed server 将部分请求转发到真正的 remote server。实现了本地资源和远程资源有机混合。
4. 作为代理服务器可提供cache功能!由于用户不能察觉其请求的是远程资源还是本地资源,有时为了节约用户带宽,可以将远程数据cache到本地,用户从本地即可获取。虽然浏览器自身支持 cache,但浏览器cache不可控,灵活性不如本方案。采用本方案后,像视频等离线下载活动,可以归结为 embed server 的cache,不需要另外编写离线资源存储模块!!之前使用过的一个技巧:不需要cache的远程资源,直接访问远程地址,需要cache的,访问 localhost。
5. 如上, cache 可以加密。
6. 作为代理服务器支持重发!!!有时网络故障等造成请求没有发送到远程服务器,在以往场景需要js处理,但是网页自己也会被关闭,网页关闭后其 js 会不再活动。而在本方案中,请求是提交到嵌入式 web server 的,embed webserver 可以根据情况(可扩充 request header 增加重发注解)决定是否反复提交到成功为止!!
ASK:为何不使用 phonegap 方案?
RE:@_@ 我上面白说了吗?
ASK:是否能形成一个颠覆 phonegap 的产品?
RE:你以为我不想,要是有人愿意欢迎一起干
在app內建web server的更多相关文章
- Web Server 与 App Server
Web Server 常见的Web Server有Apache Server与Nginx. Apache Http Server是Apache软件基金会下的一个项目,是一款开源的HTTP服务器软件(它 ...
- web server与app server有什么不同
简单来说,web服务器提供页面给浏览器,而app服务器提供客户端可以调用的接口.具体而言,我们可以说: Web服务器处理HTTP请求,而app服务器基于多种不同的协议,处理应用程序的逻辑问题. 以下将 ...
- App server 与 Web server之间的区别
原文: http://www.javaworld.com/javaqa/2002-08/01-qa-0823-appvswebserver.html 简单来说,web服务器提供页面给浏览器,而app服 ...
- 【Python Programe】WSGI (Web Server Gateway Interface)
Part1: What is a Web server? 一个位于物理服务器上的网络服务器(服务器里的服务器),等待客户端去发送request,当服务器接收到request,就会生成一个respons ...
- Difference between web server ,web container and application server
In Java: Web Container or Servlet Container or Servlet Engine : is used to manage the components lik ...
- Jexus-5.6.3使用详解、Jexus Web Server配置
一.Jexus Web Server配置 在 jexus 的工作文件夹中(一般是“/usr/jexus”)有一个基本的配置文件,文件名是“jws.conf”. jws.conf 中至少有 Site ...
- CentOS 5.5 下安装Countly Web Server过程记录
CentOS 5.5 下安装Countly Web Server过程记录 1. 系统更新与中文语言包安装 2. 基本环境配置: 2.1. NodeJS安装 依赖项安装 yum -y install g ...
- 小测几种python web server的性能
http://blog.csdn.net/raptor/article/details/8038476 因为换了nginx就不再使用mod_wsgi来跑web.py应用了,现在用的是gevent-ws ...
- PHP内置Web Server探究(一)启动Cli_Server
自PHP5.4之后 PHP内置了一个Web 服务器(cli_server),类似于Python的内置server一样,方便我们开发阶段的调试 主要使用场景: 1,没有搭建nginx或apache等第三 ...
- Atitit.Gui控件and面板----web server区----- web服务器监控面板and控制台条目
Atitit.Gui控件and面板----web server区----- web服务器监控面板and控制台条目 1. Resin4.0.22 1 2. 查看http连接数::Summary>& ...
随机推荐
- springboot的启动类必须和controller在同一层级
springboot的启动类必须和controller在同一层级
- js 中什么情况下返回 undefined 值
1. 声明变量没有赋值 <script> let num console.log(num) //undefined </script> 2. 访问不存在的属性 <scri ...
- 常见函数 ,过滤函数 直接导入使用 ,filters.js 文件 批量注册过滤器
// import parseTime, formatTime and set to filter /** * Show plural label if time is plural number * ...
- 011 Python 的打印(花式变色打印)和注释(为什么加个#号就能注释)
#!/usr/bin/env python # -*- coding:utf-8 -*- # Datatime:2022/7/18 21:29 # Filename:011 Python 的打印和注释 ...
- JavaScript原型链污染探讨
如果你想弄明白什么怎样才可以实现JavaScript的原型链污染,那么你首先需要弄清楚两个东西,那就是__proto__和prototype. 到底什么才是__proto__和prototype? 那 ...
- 凌晨 12 点突发 istio 生产事故!一顿操作猛如虎解决了
事故起因 业务上新集群,本来以为"洒洒水",11 点切,12 点就能在家睡觉了.流量切过来后,在验证过程中,发现网页能够正常打开,在登录时返回了 502,当场懵逼.在相关的容器日志 ...
- T3 出行云原生容器化平台实践
公司简介 T3 出行是南京领行科技股份有限公司打造的智慧出行生态平台,由中国第一汽车集团有限公司.东风汽车集团有限公司.重庆长安汽车股份有限公司发起,联合腾讯.阿里巴巴等互联网企业共同投资打造.公司以 ...
- 异常处理、逻辑与(&)在条件结束判定的应用
例子:求1+2+-+n的和,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C)(注 题目来自力扣) (1)boolean和逻辑与(&am ...
- Redisson 工作原理-源码分析
时间不在于你拥有多少,而在于你怎样使用. 1:Redisson 是什么 个人理解:一种 可重入.持续阻塞.独占式的 分布式锁协调框架,可从 ReentrantLock 去看它. ①:可重入锁 拿到锁的 ...
- mysql替换内容
UPDATE storage SET guige = REPLACE(guige, '×', 'x')