这几年在三家企业都使用 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的更多相关文章

  1. Web Server 与 App Server

    Web Server 常见的Web Server有Apache Server与Nginx. Apache Http Server是Apache软件基金会下的一个项目,是一款开源的HTTP服务器软件(它 ...

  2. web server与app server有什么不同

    简单来说,web服务器提供页面给浏览器,而app服务器提供客户端可以调用的接口.具体而言,我们可以说: Web服务器处理HTTP请求,而app服务器基于多种不同的协议,处理应用程序的逻辑问题. 以下将 ...

  3. App server 与 Web server之间的区别

    原文: http://www.javaworld.com/javaqa/2002-08/01-qa-0823-appvswebserver.html 简单来说,web服务器提供页面给浏览器,而app服 ...

  4. 【Python Programe】WSGI (Web Server Gateway Interface)

    Part1: What is a Web server? 一个位于物理服务器上的网络服务器(服务器里的服务器),等待客户端去发送request,当服务器接收到request,就会生成一个respons ...

  5. 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 ...

  6. Jexus-5.6.3使用详解、Jexus Web Server配置

    一.Jexus Web Server配置   在 jexus 的工作文件夹中(一般是“/usr/jexus”)有一个基本的配置文件,文件名是“jws.conf”. jws.conf 中至少有 Site ...

  7. CentOS 5.5 下安装Countly Web Server过程记录

    CentOS 5.5 下安装Countly Web Server过程记录 1. 系统更新与中文语言包安装 2. 基本环境配置: 2.1. NodeJS安装 依赖项安装 yum -y install g ...

  8. 小测几种python web server的性能

    http://blog.csdn.net/raptor/article/details/8038476 因为换了nginx就不再使用mod_wsgi来跑web.py应用了,现在用的是gevent-ws ...

  9. PHP内置Web Server探究(一)启动Cli_Server

    自PHP5.4之后 PHP内置了一个Web 服务器(cli_server),类似于Python的内置server一样,方便我们开发阶段的调试 主要使用场景: 1,没有搭建nginx或apache等第三 ...

  10. Atitit.Gui控件and面板----web server区----- web服务器监控面板and控制台条目

    Atitit.Gui控件and面板----web server区----- web服务器监控面板and控制台条目 1. Resin4.0.22 1 2. 查看http连接数::Summary>& ...

随机推荐

  1. 018 人生中第一次用 Python 写的一个小程序_猜年龄(再次强调,重视基础)

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  2. HDU-ACM 2024 Day3

    T1004 游戏(HDU 7460) 注意到对于两个人,他们 \(t\) 轮后能力值相同的概率只与他们初始时的能力差有关,所以我们先 \(\text{FFT}\) 求出 \(|a_i - a_j| = ...

  3. 从0到1实现项目Docker编排部署

    在深入讨论 Docker 编排之前,首先让我们了解一下 Docker 技术本身.Docker 是一个开源平台,旨在帮助开发者自动化应用程序的部署.扩展和管理.自 2013 年推出以来,Docker 迅 ...

  4. HTTP常见状态码详细解析

    HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器 超文本传输协议响应状态的3位数字代码. 它由 RFC 2616 规范定义的,并得到 RFC 2518.RFC 2817.R ...

  5. AMCL 原理解读

    AMCL(adaptive Monte Carlo Localization)自适应蒙特卡洛定位,A也可以理解为augmented,,源于MCL算法的一种增强,是机器人在二维移动过程中概率定位系统,采 ...

  6. c语言里关于本地变量的一些规则

    关于块的定义(自己的理解):就是☞{ }这个区域里面的东西以及" {} "这个符号的本身 ·本地的变量是定义在块内的 -->>1.它可以定义在函数的块内 void sw ...

  7. 【CoCollider】让系统和应用适配如此简单

    在各平台应用开发过程中,随着业务的功能增加,不免会涉及到非公开的API依赖,针对某些应用或厂商系统的适配,每个版本都需要投入精力去排查,CoCollider 可以让我们的适配效率从几个星期提升到几小时 ...

  8. C++面经(持续更新)

    一. c,c++区别<九大点> c: 面向过程 c++: 面向对象(封装,继承,多态) 对象:对数据和作用于数据的操作组成的封装实体 类:描叙了一组有相同属性和方法的对象<虚拟> ...

  9. ABP —— 权限管理

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 完成了简单的增删改查和分页功能,是不是觉得少了点什么?是的,少了权限管理.既然涉及到了权限,那我们 ...

  10. 自动化构建镜像:Packer

    在介绍Packer之前,先来回顾一下未使用Packer时自定义虚拟机镜像的步骤.先在本地启动一个虚拟机,从安装系统开始,再进行自定义配置或应用安装,最后封装压缩成镜像,详细操作步骤可以参考我之前写的文 ...