Nginx集群之.Net打造WebApp(支持IOS和安卓)
目录
1 大概思路... 1
2 Nginx集群之.Net打造WebApp(支持IOS和安卓) 1
3 安卓模拟器... 1
4 MUI框架... 3
5 编写.NET WebApi的服务端... 4
6 在本机启动WebApi 7
7 Nginx集群配置搭建... 8
8 运行结果... 9
9 总结... 15
1 大概思路
- Nginx集群之.Net打造WebApp(支持IOS和安卓)
- 安卓模拟器
- MUI框架
- 编写.NET WebApi的服务端
- 在本机启动WebApi
- Nginx集群配置
- 运行结果
- 总结
2 Nginx集群之.Net打造WebApp(支持IOS和安卓)
讨论了那么多Nginx集群的应用,本文就打造一个安卓App实例来展现给大家。
WebApi好处就是无前端化,无论前端是PC机、笔记本、手机、平板电脑或者是IOS等,都可以通过集群,实现数据流的交互。如果要支持视频流这些,就要另当别论了。
MUI框架在国内是个不错的框架,本次主要还是利用MUI框架实现一个简单的APP,这个APP动态调用WebApi,利用XPATH方式爬虫抓取博客园的文章,从而实现一个简单的“天下网阅”APP。
以下是本文讲述的主要结构图:
手机“天下网阅”APP,访问Nginx集群WebApi,然后抓取博客园文章,如下所示:
3 安卓模拟器
安卓模拟器可以采用夜神模拟器(可以采用原生的android模拟器,或者其它类型的模拟器),输入以下adb命令:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。 C:\Users\zhyongfeng>cd D:\Program Files (x86)\Nox\bin C:\Users\zhyongfeng>d: D:\Program Files (x86)\Nox\bin>nox_adb connect 127.0.0.1:62001
4 MUI框架
MUI是最接近原生App体验的前端框架,可多端发布到Appstore、Android市场、浏览器、微信公众号、百度直达号及流应用。
MUI相关的学习资源:http://dev.dcloud.net.cn/mui/
MUI使用的工具:HBuilder
运行CMD,输入以下命令:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。 C:\Users\zhyongfeng>cd D:\DTLDownLoads\HBuilder_8.8.0_windows\HBuilder\tools\adb
s C:\Users\zhyongfeng>d: D:\DTLDownLoads\HBuilder_8.8.0_windows\HBuilder\tools\adbs>adb connect 127.0.0.1:62001
5 编写.NET WebApi的服务端
CnBlogsController.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Web.Http;
using Newtonsoft.Json;
using HtmlAgilityPack;
using WebAppCnBlogsApi.Models; namespace WebAppCnBlogsApi.Controllers
{
[RoutePrefix("api/CnBlogs")]
public class CnBlogsController : ApiController
{
[Route("GetCnBlogs")]
public string GetCnBlogs(int i)
{
string url = "https://www.cnblogs.com/mvc/AggSite/PostList.aspx";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/json; charset=utf-8";
object o = new
{
CategoryType = "SiteHome",
ParentCategoryId = ,
CategoryId = ,
PageIndex = i,
TotalPostCount = ,
ItemListActionName = "PostList"
};
//如果需要POST数据
byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(o));
req.ContentLength = data.Length;
using (Stream stream = req.GetRequestStream())
{
stream.Write(data, , data.Length);
} HttpWebResponse response = (HttpWebResponse)req.GetResponse();
Stream streamReceive = response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
string strResult = streamReader.ReadToEnd();
streamReader.Close();
streamReceive.Close();
req.Abort();
response.Close(); //解析HTML
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(strResult);
HtmlNodeCollection cnBlogsNodeCollection = doc.DocumentNode.SelectNodes("//div[@class='post_item_body']");
List<HtmlCnBlogs> listCnBlogs = new List<HtmlCnBlogs>(); int j = ;
foreach(HtmlNode m in cnBlogsNodeCollection)
{
j++;
HtmlCnBlogs cn = new HtmlCnBlogs();
HtmlNode author = m.SelectSingleNode("/div[" + j + "]/div[2]/div[1]/a[1]");
cn.author = author.InnerText.Trim();
cn.authorHref= author.Attributes["href"].Value;
HtmlNode authorCreateTime = m.SelectSingleNode("/div[" + j + "]/div[2]/div[1]");
cn.createtime = authorCreateTime.ChildNodes[].InnerText.Trim();
HtmlNode img = m.SelectSingleNode("/div["+j+"]/div[2]/p[1]/a[1]/img[1]");
if (img != null)
cn.authorImg = string.Format("https:{0}", img.Attributes["src"].Value); HtmlNode h3 = m.SelectSingleNode("/div[" + j + "]/div[2]/h3[1]");
cn.title = h3.InnerText;
HtmlNode titlelnk = m.SelectSingleNode("/div[" + j + "]/div[2]/h3[1]/a[1]");
cn.titlelink = titlelnk.Attributes["href"].Value;
//简介
HtmlNode content = m.SelectSingleNode("/div["+j+"]/div[2]/p[1]");
cn.content = content.InnerText.Trim();
//评论、评论URL
HtmlNode comments = m.SelectSingleNode("/div[" + j + "]/div[2]/div[1]/span[1]/a[1]");
string strComments = comments.InnerText.Trim();
StringBuilder sbComments = new StringBuilder();
foreach (char c in strComments)
{
if (Convert.ToInt32(c) >= && Convert.ToInt32(c) <= )
{
sbComments.Append(c);
}
}
cn.commentsHref = comments.Attributes["href"].Value;
cn.comments = int.Parse(sbComments.ToString())
;
HtmlNode views = m.SelectSingleNode("/div["+j+"]/div[2]/div[1]/span[2]/a[1]");
string strViews = views.InnerText.Trim();
StringBuilder sbViews = new StringBuilder();
foreach (char c in strViews)
{
if (Convert.ToInt32(c) >= && Convert.ToInt32(c) <= )
{
sbViews.Append(c);
}
}
cn.viewsHref= views.Attributes["href"].Value;
cn.views = int.Parse(sbViews.ToString());
listCnBlogs.Add(cn);
}
return JsonConvert.SerializeObject(listCnBlogs);
}
}
}
6 在本机启动WebApi
将WebApi部署到以下10.93.85.66(因网络限制,所以这里只在本机上执行启动)
7 Nginx集群配置搭建
Nginx的集群配置:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost zhyongfeng;
location / {
proxy_pass http://localhost:51690;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
运行CMD:
D:\DTLDownLoads\nginx-1.10.2>start nginx
D:\DTLDownLoads\nginx-1.10.2>nginx -s reload
8 运行结果
启动安装在手机端的APP(或者启动HBuilder)
9 总结
通过Ningx集群,再使用MUI前端框架打包生成android的APP(也可以生成IOS的APP),WebApi提供了集群API的数据流访问,通过API能够动态抓取博客园的文章,并反馈到APP主页上,从而完成了一个简单的“天下网阅”APP设计。
源代码下载:
http://download.csdn.net/download/ruby_matlab/10175001
PDF下载:
Nginx集群之.Net打造WebApp(支持IOS和安卓).pdf
App体验版(无数据交互):
帐户名:zhyongfeng
密码:123456
https://files.cnblogs.com/files/yongfeng/TianXiaWangYue.apk
Nginx集群之.Net打造WebApp(支持IOS和安卓)的更多相关文章
- 扎实基础之从零开始-Nginx集群分布式.NET应用
1 扎实基础之快速学习Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少 ...
- Nginx集群之WCF分布式身份验证(支持Soap)
目录 1 大概思路... 1 2 Nginx集群之WCF分布式身份验证... 1 3 BasicHttpBinding.ws2007HttpBinding. 2 4 ...
- Nginx集群之WCF大文件上传及下载(支持6G传输)
目录 1 大概思路... 1 2 Nginx集群之WCF大文件上传及下载... 1 3 BasicHttpBinding相关配置解析... 2 4 编写 ...
- Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 ============================= 蕃薯耀 2017年11月27日 http: ...
- Nginx集群配置与redis的session共享策略
一.什么是Nginx? Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Ramb ...
- Nginx集群之WCF分布式局域网应用
目录 1 大概思路... 1 2 Nginx集群WCF分布式局域网结构图... 1 3 关于WCF的BasicHttpBinding. 1 4 编写WC ...
- Nginx集群之WCF分布式消息队列
目录 1 大概思路... 1 2 Nginx集群之WCF分布式消息队列... 1 3 MSMQ消息队列... 2 4 编写WCF服务.客户端程序... ...
- Nginx集群之SSL证书的WebApi微服务
目录 1 大概思路... 1 2 Nginx集群之SSL证书的WebApi微服务... 1 3 HTTP与HTTPS(SSL协议)... 1 4 Ope ...
- Nginx集群之基于Redis的WebApi身份验证
目录 1 大概思路... 1 2 Nginx集群之基于Redis的WebApi身份验证... 1 3 Redis数据库... 2 4 Visualbox ...
随机推荐
- 开源API测试工具 Hitchhiker v0.6更新 - 改进压力测试
Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持Schedule, 数据对比,压力测试,支持上传脚本定制请求,可以轻松部署到本地,和你的team成员一起协作测试 ...
- Java爬虫——模拟登录知乎
登录界面,首先随意输入一个账号,登录查看发送表单的请求 可以发现请求是Post : https://www.zhihu.com/login/phone_num 发送的表单是 _xsrf: passwo ...
- EFCore2.0 Code First基本使用
前言 在网上找EFCore Code First相关的文章,很多都是基于core 1.0版本的,觉得有必要自己实践下2.0.所以,撸起袖子干吧!~ 1.新建控制台项目(这里就不放图了) 2.打开程序包 ...
- JDBC中的Statement和PreparedStatement的差别
以Oracle为例吧 Statement为一条Sql语句生成运行计划, 假设要运行两条sql语句 select colume from table where colume=1; select col ...
- Android开发之监听发出的短信
执行效果图: 预备知识: 为了监听指定的ContentProvider的数据的改变,须要通过ContentResolver向指定Uri注冊CotentObserver监听器.ContentResolv ...
- RxJava开发精要6 - 组合Observables
原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发人员头条享有独家 ...
- iOS 从应用程序跳转到评价界面
1,跳转到App Store: NSString *str = [NSString stringWithFormat:@"http://itunes.apple.com/us/app/id% ...
- “command line option syntax error,Type command/?for help
VS2010安装WDT时出现"command line option syntax error.Type command/?for help错误 解决:可能是由于你的安装源文件所在的路径中有 ...
- JAVA随笔篇一(Timer源代码分析和scheduleAtFixedRate的使用)
写完了基础篇,想了非常久要不要去写进阶篇.去写JSP等等的用法.最后决定先不去写.由于自己并非JAVA方面的大牛.眼下也在边做边学,所以决定先将自己不懂的拿出来学并记下来. Timer是Java自带的 ...
- php&&页面静态化
页面静态化.主要是出于两个方面的考虑. 第一:訪问html页面的速度比訪问php页面的速度快.在訪问php页面时候.须要对php进行解析.訪问html时候,直接浏览器能够解析出来.特别是PV量 ...