在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>& ...
随机推荐
- ASP.NET Core OData 9的发布,放弃 .NET Framework
Microsoft 于 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9 包. 这个新包将ASP.NET Core与.NET 8 OData库保持一致,改变了OData ...
- 1.1 HELLO 窗口
跟着教程,开始第一步创建窗口吧!这一节不涉及太多知识. 本节会出现一些名词,我们现在只需要知道它们大概是干什么的就行. ● GLFW:一个专门针对OpenGL的C语言库,通过它提供的接口,我们就可以渲 ...
- vue前端开发仿钉图系列(6)左侧记事本的开发详解
在页面开发中,深深的被element组件所吸引,里面很多小组件都可以直接使用.像是记事本提示.记事本列表时间线.右侧编辑页面的form表单,编辑和查看状态的切换等等,比之前iOS原生开发所有的东西都要 ...
- markdown.css 设置文章的样式
返回的详情文章内容是标签加内容文字,使用 markdown,css 渲染样式 : .markdown-body .octicon { display: inline-block; fill: curr ...
- webpack中 loader和plugin的区别
首先 ,loader 是文件加载器,能够加载资源文件,并对文件进行一些处理,如翻译,压缩 ,最终一起打包到指定的文件中 :loader 运行在打包项目之前 : plugin 是插件 ,plugin赋予 ...
- docker 靶场 笔记
docker 靶场 笔记 搜索 镜像容器 sudo docker search dvwa 查看所有镜像容器 docker ps -a 下载 指定的 镜像 并在后台启动 docker run -itd ...
- 开发者故事:基于 KubeSphere LuBan 架构打造下一代云交付平台
前言 在 KubeSphere Marketplace,个人开发者的创意和才能正在逐渐崭露头角.今日,我们荣幸地向大家介绍 Shipper 云交付平台的开发者--凌波,一位云原生领域的资深专家. 凌波 ...
- 云原生周刊:Istio 1.19 发布 | 2023.9.11
开源项目推荐 Timoni Timoni 是 Kubernetes 的软件包管理器,由 CUE 提供支持,灵感来自 Helm. Timoni 项目致力于改善编写 Kubernetes 配置的用户体验. ...
- 项目运行时,tomcat服务器端口被占用
1.查看tomcat配置文件: 2.查看项目控制台的打印信息: 3.dos命令行解决端口占用 (1)dos命令模式下输入: netstat -ano (进入dos命令:Win + R ,输入cmd ) ...
- kubectl常用命令(一)
一.查看 1.查看集群状态 # 查看客户端及服务端程序版本信息 kubectl version --short=true