在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>& ...
随机推荐
- 左值 <->右值
左值引用指向左值 右值引用指向右值 int a = 5; int &ref_a = a; // 左值引用指向左值,编译通过 int &ref_a = 5; // 左值引用指向了右值,会 ...
- std::stod:“123.456”-> 123.456
std::stod 是 C++ 标准库中一个用于将字符串转换为 double 类型的函数.它属于 <string> 头文件中的函数,通常用于将包含数字的字符串转换为相应的浮点数值. 函数原 ...
- USB LFPS是什么?
USB LFPS:低功耗状态下的高速数据传输 什么是USB LFPS? USB LFPS(Low-Power Signaling)指的是USB接口在低功耗状态下的一种高速数据传输技术.传统上,USB接 ...
- 2022年9月中国数据库排行榜:榜眼、探花纷纷易主,AnalyticDB蝉联榜单十强
夏去秋来清风至,榜首前三起涟漪. 2022年9月的 墨天轮中国数据库流行度排行榜火热出炉,相比上月新增两个数据库, 本月榜单前十名可以用一句话概括为:OceanBase新版发布先声夺人,达梦低调做事暂 ...
- day16-break,continue,goto
break,continue,goto break在任何循环语句的主体部分,均可用break控制循环的流程.break用于强行退出循环,不执行循环中剩余的语句.(break语句也在switch选择语句 ...
- Spring实现MySQL事务操作
一.创建数据库表 表名:account 字段:(`id`,`username`,`money`) 二.dao.service层创建业务接口.类 1 public interface UserDao { ...
- Java跳出当前的多重嵌套循环的3种解决方法
Java跳出当前的多重嵌套循环的3种解决方法(以双重嵌套为例) 方法一:使用一个布尔型的标记变量flag 1 public static void method1() { 2 boolean flag ...
- dirseach目录扫描工具-安装详细教程
安装: 1.github源码下载解压 使用 git 安装: 推荐git clone https://github.com/maurosoria/dirsearch.git --depth 1 zip文 ...
- Vue 中 v-html 无法被 style scoped 渲染的问题
假设有这么一个 vue 组件: <template> <div v-html="docPreview"/> </template> <st ...
- 怎么使用云桌面(云电脑)?ToDesk新手入门教程
在当今数字化时代,个人用户对于电脑性能的需求日益提升,而云电脑(又可称为云桌面)作为一种新型的电脑配备模式,正在逐渐进入人们的视野. 对于很多新手来说,可能是第一次接触到云电脑软件,今天小社长就以To ...