在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>& ...
随机推荐
- USB2.0 USB3.0 供电情况及规定
USB(通用串行总线)的不同版本在供电能力和规定上有所不同.以下是关于USB 2.0.USB 3.0和USB 3.1供电情况的详细信息: USB 2.0 最大供电电流: 500毫安 (mA) 最大供电 ...
- aarch64 和 ARMV8 的区别
aarch64 和 ARMv8 是紧密相关但涵义不同的术语,在解释他们的区别之前,让我们先简单理解它们各自的含义: ARMv8: ARMv8 是指 ARM 架构的第八个版本,这是由 ARM Holdi ...
- /proc/vmalloc
root@pita2_mr813_tina35:/# cat /proc/vmallocinfo 0xffffff80007d0000-0xffffff8000902000 1253376 load_ ...
- SCHED_RR和SCHED_FIFO的区别
SCHED_RR和SCHED_FIFO是Linux内核中用来调度进程的两种调度策略,它们有以下几点区别: 调度方式:SCHED_RR采用轮转调度方式,而SCHED_FIFO则采用先进先出调度方式. 优 ...
- 0606-nn.functional
0606-nn.functional 目录 一.nn.functional 和 nn.Module 的区别 二.nn.functional 和 nn.Module 结合使用 pytorch完整教程目录 ...
- springboot2.X动态修改log4j2日志级别
利用springboot提供的 spring-boot-starter-actuator 包可以实现动态修改log4j2日志级别的功能 添加依赖 添加依赖包 <dependency> &l ...
- 2024-10-13:用go语言,给定一个二进制数组 nums,长度为 n, 目标是让 Alice 通过最少的行动次数从 nums 中拾取 k 个1。 Alice可以选择任何索引 aliceIndex
2024-10-13:用go语言,给定一个二进制数组 nums,长度为 n, 目标是让 Alice 通过最少的行动次数从 nums 中拾取 k 个1. Alice可以选择任何索引 aliceIndex ...
- Web渗透07_脚本代码注入和OS命令注入( 恐怖级别 )
1 PHP代码注入 1.1 原理成因 网站对用户的输入过滤出现问题,同时网站的脚本编写用到一些危险函数 eval(),assert().如果被攻击者发现漏洞,直接可能造成攻击者完全控制整个web甚至是 ...
- golang slice相关常见的性能优化手段
介绍一些开发中常用的slice关联的性能优化手段.鉴于golang编译器本身捉鸡的优化能力,优化的成本就得分摊在开发者自己的头上了. 这篇文章会介绍的优化手段是下面这几样: 创建slice时预分配内存 ...
- cv算法工程师成长路线
前言 一,计算机系统 1.1,计算机系统书籍 1.2,设计模式教程 二,编程语言 2.1,C++ 学习资料 2.2,Python 学习资料 三,数据结构与算法 3.1,数据结构与算法课程 3.2,算法 ...