目录

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和安卓)的更多相关文章

  1. 扎实基础之从零开始-Nginx集群分布式.NET应用

    1       扎实基础之快速学习Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少 ...

  2. Nginx集群之WCF分布式身份验证(支持Soap)

    目录 1       大概思路... 1 2       Nginx集群之WCF分布式身份验证... 1 3       BasicHttpBinding.ws2007HttpBinding. 2 4 ...

  3. Nginx集群之WCF大文件上传及下载(支持6G传输)

    目录 1       大概思路... 1 2       Nginx集群之WCF大文件上传及下载... 1 3       BasicHttpBinding相关配置解析... 2 4       编写 ...

  4. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 ============================= 蕃薯耀 2017年11月27日 http: ...

  5. Nginx集群配置与redis的session共享策略

    一.什么是Nginx? Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Ramb ...

  6. Nginx集群之WCF分布式局域网应用

    目录 1       大概思路... 1 2       Nginx集群WCF分布式局域网结构图... 1 3       关于WCF的BasicHttpBinding. 1 4       编写WC ...

  7. Nginx集群之WCF分布式消息队列

    目录 1       大概思路... 1 2       Nginx集群之WCF分布式消息队列... 1 3       MSMQ消息队列... 2 4       编写WCF服务.客户端程序... ...

  8. Nginx集群之SSL证书的WebApi微服务

    目录 1       大概思路... 1 2       Nginx集群之SSL证书的WebApi微服务... 1 3       HTTP与HTTPS(SSL协议)... 1 4       Ope ...

  9. Nginx集群之基于Redis的WebApi身份验证

    目录 1       大概思路... 1 2       Nginx集群之基于Redis的WebApi身份验证... 1 3       Redis数据库... 2 4       Visualbox ...

随机推荐

  1. 开源API测试工具 Hitchhiker v0.6更新 - 改进压力测试

    Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持Schedule, 数据对比,压力测试,支持上传脚本定制请求,可以轻松部署到本地,和你的team成员一起协作测试 ...

  2. Java爬虫——模拟登录知乎

    登录界面,首先随意输入一个账号,登录查看发送表单的请求 可以发现请求是Post : https://www.zhihu.com/login/phone_num 发送的表单是 _xsrf: passwo ...

  3. EFCore2.0 Code First基本使用

    前言 在网上找EFCore Code First相关的文章,很多都是基于core 1.0版本的,觉得有必要自己实践下2.0.所以,撸起袖子干吧!~ 1.新建控制台项目(这里就不放图了) 2.打开程序包 ...

  4. JDBC中的Statement和PreparedStatement的差别

    以Oracle为例吧 Statement为一条Sql语句生成运行计划, 假设要运行两条sql语句 select colume from table where colume=1; select col ...

  5. Android开发之监听发出的短信

    执行效果图: 预备知识: 为了监听指定的ContentProvider的数据的改变,须要通过ContentResolver向指定Uri注冊CotentObserver监听器.ContentResolv ...

  6. RxJava开发精要6 - 组合Observables

    原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发人员头条享有独家 ...

  7. iOS 从应用程序跳转到评价界面

    1,跳转到App Store: NSString *str = [NSString stringWithFormat:@"http://itunes.apple.com/us/app/id% ...

  8. “command line option syntax error,Type command/?for help

    VS2010安装WDT时出现"command line option syntax error.Type command/?for help错误 解决:可能是由于你的安装源文件所在的路径中有 ...

  9. JAVA随笔篇一(Timer源代码分析和scheduleAtFixedRate的使用)

    写完了基础篇,想了非常久要不要去写进阶篇.去写JSP等等的用法.最后决定先不去写.由于自己并非JAVA方面的大牛.眼下也在边做边学,所以决定先将自己不懂的拿出来学并记下来. Timer是Java自带的 ...

  10. php&amp;&amp;页面静态化

    页面静态化.主要是出于两个方面的考虑.     第一:訪问html页面的速度比訪问php页面的速度快.在訪问php页面时候.须要对php进行解析.訪问html时候,直接浏览器能够解析出来.特别是PV量 ...