﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-牵着老婆满街逛</title><link>http://www.cppblog.com/tx7do/</link><description>严以律己,宽以待人. 三思而后行.&lt;/br&gt;
GMail/GTalk: yanglinbo#google.com;&lt;/br&gt;
MSN/Email: tx7do#yahoo.com.cn;&lt;/br&gt;
QQ: 3 0 3 3 9 6 9 2 0 .</description><language>zh-cn</language><lastBuildDate>Fri, 10 Apr 2026 07:10:38 GMT</lastBuildDate><pubDate>Fri, 10 Apr 2026 07:10:38 GMT</pubDate><ttl>60</ttl><item><title>Unity3D 真正解决 ProceduralMaterial is obsolete的问题</title><link>http://www.cppblog.com/tx7do/archive/2021/08/11/217778.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 11 Aug 2021 14:20:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2021/08/11/217778.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/217778.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2021/08/11/217778.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/217778.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/217778.html</trackback:ping><description><![CDATA[转载自:https://blog.csdn.net/u011921203/article/details/112062733?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control<br /><br /><br /><br /><div>百度害死人啊 瞎几把乱写</div><div>https://jingyan.baidu.com/article/72ee561a1f0291e16138dfd5.html</div><div></div><div>其实这个问题不光是要引入 Subtance in unity 这个插件，还需要对 项目的老代码进行改写</div><div>&nbsp;</div><div></div><div>Substance.Game is the assembly that contains the classes used for scripting. These classes are as follows:</div><div></div><div>&nbsp;</div><div></div><div>Substance.Game.Substance: References the sbsar</div><div></div><div>Substance.Game.SubstanceGraph: Individual graph in the sbsar. (used to be ProceduralMaterial in Unity 2017)</div><div></div><div>项目中的 ProceduralMaterial 一律要改成 Substance.Game.SubstanceGraph:</div><div></div><div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</div><div>版权声明：本文为CSDN博主「YonicStudio逸飞」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。</div><div>原文链接：https://blog.csdn.net/u011921203/article/details/112062733</div><div class="xl-chrome-ext-bar" id="xl_chrome_ext_{4DB361DE-01F7-4376-B494-639E489D19ED}" style="display: none;">
      <div class="xl-chrome-ext-bar__logo"></div>

      <a id="xl_chrome_ext_download" href="javascript:;" class="xl-chrome-ext-bar__option">下载视频</a>
      <a id="xl_chrome_ext_close" href="javascript:;" class="xl-chrome-ext-bar__close"></a>
    </div><img src ="http://www.cppblog.com/tx7do/aggbug/217778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2021-08-11 22:20 <a href="http://www.cppblog.com/tx7do/archive/2021/08/11/217778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>etcd在Windows下的单机部署</title><link>http://www.cppblog.com/tx7do/archive/2021/06/19/217720.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Fri, 18 Jun 2021 21:11:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2021/06/19/217720.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/217720.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2021/06/19/217720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/217720.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/217720.html</trackback:ping><description><![CDATA[<h2>etcd 常用配置参数<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->--name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">指定节点名称</span><span style="color: #008000; "><br />
</span>--data-dir&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">指定节点的数据存储目录，用于保存日志和快照</span><span style="color: #008000; "><br />
</span>--addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">公布的&nbsp;IP&nbsp;地址和端口；默认为&nbsp;127.0.0.1:2379</span><span style="color: #008000; "><br />
</span>--bind-addr&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">用于客户端连接的监听地址；默认为&#8211;addr&nbsp;配置</span><span style="color: #008000; "><br />
</span>--peers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">集群成员逗号分隔的列表；例如&nbsp;127.0.0.1:2380,127.0.0.1:2381</span><span style="color: #008000; "><br />
</span>--peer-addr&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">集群服务通讯的公布的&nbsp;IP&nbsp;地址；默认为&nbsp;127.0.0.1:2380</span><span style="color: #008000; "><br />
</span>--peer-bind-addr&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">集群服务通讯的监听地址；默认为-peer-addr&nbsp;配置</span><span style="color: #008000; "><br />
</span>--wal-dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">指定节点的&nbsp;wal&nbsp;文件的存储目录，若指定了该参数&nbsp;wal&nbsp;文件会和其他数据文件分开存储</span><span style="color: #008000; "><br />
</span>--listen-client-urls&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">监听&nbsp;URL；用于与客户端通讯</span><span style="color: #008000; "><br />
</span>--listen-peer-urls&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">监听&nbsp;URL；用于与其他节点通讯</span><span style="color: #008000; "><br />
</span>--initial-advertise-peer-urls&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">告知集群其他节点&nbsp;URL</span><span style="color: #008000; "><br />
</span>--advertise-client-urls&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">告知客户端&nbsp;URL</span><span style="color: #008000; "><br />
</span>--initial-cluster-token&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">集群的&nbsp;ID</span><span style="color: #008000; "><br />
</span>--initial-cluster&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">集群中所有节点</span><span style="color: #008000; "><br />
</span>--initial-cluster-state&nbsp;new&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">表示从无到有搭建&nbsp;etcd&nbsp;集群</span><span style="color: #008000; "><br />
</span>--discovery-srv&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">用于&nbsp;DNS&nbsp;动态服务发现，指定&nbsp;DNS&nbsp;SRV&nbsp;域名</span><span style="color: #008000; "><br />
</span>--discovery&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">用于&nbsp;etcd&nbsp;动态发现，指定&nbsp;etcd&nbsp;发现服务的&nbsp;URL</span><span style="color: #008000; "><br />
</span></div>
<br />
<br />
etcd总共有两种集群模式:<br />
<ol style="font-weight: normal;">
     <li><span style="font-weight: normal;">单节点(Standalone);</span></li>
     <li><span style="font-weight: normal;">多节点,多节点的话,因为节点数必须是奇数个,所以最小集群通常是3节点.</span></li>
</ol>
<br />
<br />
etcd在windows下面有三种启动方式:<br />
<ol style="font-weight: normal;">
     <li><span style="font-weight: normal;">将参数直接输入到命令行里,然后通过命令行或者bat启动;</span></li>
     <li><span style="font-weight: normal;">将参数写入到yml配置文件里面,通过命令行或者bat启动;</span></li>
     <li><span style="font-weight: normal;">运行在docker下面了.</span></li>
</ol>
<br />
<br />
<span style="font-weight: normal;">
1.直接命令行<br />
</span></h2>
<h2><span style="font-weight: normal;">1.1单节点<br />
</span>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->.\etcd.exe&nbsp;--name&nbsp;standalone&nbsp;^<br />
--data-dir&nbsp;.\data\standalone&nbsp;^<br />
--advertise-client-urls&nbsp;http://0.0.0.0:2379&nbsp;^<br />
--listen-client-urls&nbsp;http://0.0.0.0:2379&nbsp;^<br />
--initial-cluster-token&nbsp;etcd-standalone&nbsp;^<br />
--initial-cluster-state&nbsp;new<br />
<br />
pause</div>
<span style="font-weight: normal;">
<br />
1.2多节点<br />
</span>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->.\etcd.exe&nbsp;--name&nbsp;node01&nbsp;^<br />
--data-dir&nbsp;.\data\node01&nbsp;^<br />
--advertise-client-urls&nbsp;http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2379</span>&nbsp;^<br />
--<span style="color: #0000FF; ">listen</span>-client-urls&nbsp;http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2379</span>&nbsp;^<br />
--<span style="color: #0000FF; ">listen</span>-peer-urls&nbsp;http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2380</span>&nbsp;^<br />
--initial-advertise-peer-urls&nbsp;http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2380</span>&nbsp;^<br />
--initial-cluster-token&nbsp;etcd-cluster-<span style="color: #800000; ">1</span>&nbsp;^<br />
--initial-cluster&nbsp;node01=http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2380</span>,node02=http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2381</span>,node03=http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2382</span>&nbsp;^<br />
--initial-cluster-state&nbsp;new<br />
<br />
.\etcd.exe&nbsp;--name&nbsp;node02&nbsp;^<br />
--data-dir&nbsp;.\data\node02&nbsp;^<br />
--advertise-client-urls&nbsp;http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2378</span>&nbsp;^<br />
--<span style="color: #0000FF; ">listen</span>-client-urls&nbsp;http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2378</span>&nbsp;^<br />
--<span style="color: #0000FF; ">listen</span>-peer-urls&nbsp;http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2381</span>&nbsp;^<br />
--initial-advertise-peer-urls&nbsp;http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2381</span>&nbsp;^<br />
--initial-cluster-token&nbsp;etcd-cluster-<span style="color: #800000; ">1</span>&nbsp;^<br />
--initial-cluster&nbsp;node01=http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2380</span>,node02=http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2381</span>,node03=http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2382</span>&nbsp;^<br />
--initial-cluster-state&nbsp;new<br />
<br />
.\etcd.exe&nbsp;--name&nbsp;node03&nbsp;^<br />
--data-dir&nbsp;.\data\node03&nbsp;^<br />
--advertise-client-urls&nbsp;http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2377</span>&nbsp;^<br />
--<span style="color: #0000FF; ">listen</span>-client-urls&nbsp;http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2377</span>&nbsp;^<br />
--<span style="color: #0000FF; ">listen</span>-peer-urls&nbsp;http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2382</span>&nbsp;^<br />
--initial-advertise-peer-urls&nbsp;http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2382</span>&nbsp;^<br />
--initial-cluster-token&nbsp;etcd-cluster-<span style="color: #800000; ">1</span>&nbsp;^<br />
--initial-cluster&nbsp;node01=http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2380</span>,node02=http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2381</span>,node03=http://<span style="color: #800000; ">0.0</span>.<span style="color: #800000; ">0.0</span>:<span style="color: #800000; ">2382</span>&nbsp;^<br />
--initial-cluster-state&nbsp;new<br />
<br />
pause<br />
</div>
</h2>
<h2><span style="font-weight: normal;">
<br />
<br />
2.yml配置文件<br />
</span></h2>
<h2><span style="font-weight: normal;">2.1单节点<br />
</span>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->name:&nbsp;etcd-standalone<br />
data-dir:&nbsp;.\etcd-data\standalone&nbsp;<br />
listen-client-urls:&nbsp;'http://0.0.0.0:2379'<br />
advertise-client-urls:&nbsp;'http://0.0.0.0:2379'<br />
initial-cluster-token:&nbsp;etcd-standalone<br />
initial-cluster-state:&nbsp;new</div>
<span style="font-weight: normal;">
<br />
2.2多节点<br />
</span>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->name:&nbsp;node01<br />
data-dir:&nbsp;.\data\node01&nbsp;<br />
listen-client-urls:&nbsp;'http://0.0.0.0:2379'<br />
advertise-client-urls:&nbsp;'http://0.0.0.0:2379'<br />
listen-peer-urls:&nbsp;'http://0.0.0.0:2380'<br />
initial-advertise-peer-urls:&nbsp;'http://0.0.0.0:2380'<br />
initial-cluster:&nbsp;node01=http://0.0.0.0:2380,node02=http://0.0.0.0:2381,node03=http://0.0.0.0:2382<br />
initial-cluster-token:&nbsp;etcd-cluster-test1<br />
initial-cluster-state:&nbsp;new</div>
</h2>
<h2>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->name:&nbsp;node02<br />
data-dir:&nbsp;.\data\node02&nbsp;<br />
listen-client-urls:&nbsp;'http://0.0.0.0:2378'<br />
advertise-client-urls:&nbsp;'http://0.0.0.0:2378'<br />
listen-peer-urls:&nbsp;'http://0.0.0.0:2381'<br />
initial-advertise-peer-urls:&nbsp;'http://0.0.0.0:2381'<br />
initial-cluster:&nbsp;node01=http://0.0.0.0:2380,node02=http://0.0.0.0:2381,node03=http://0.0.0.0:2382<br />
initial-cluster-token:&nbsp;etcd-cluster-test1<br />
initial-cluster-state:&nbsp;new</div>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->name:&nbsp;node03<br />
data-dir:&nbsp;.\data\node03<br />
listen-client-urls:&nbsp;'http://0.0.0.0:2377'<br />
advertise-client-urls:&nbsp;'http://0.0.0.0:2377'<br />
listen-peer-urls:&nbsp;'http://0.0.0.0:2382'<br />
initial-advertise-peer-urls:&nbsp;'http://0.0.0.0:2382'<br />
initial-cluster:&nbsp;node01=http://0.0.0.0:2380,node02=http://0.0.0.0:2381,node03=http://0.0.0.0:2382<br />
initial-cluster-token:&nbsp;etcd-cluster-test1<br />
initial-cluster-state:&nbsp;new</div>
<span style="font-weight: normal;">启动的bat为:<br />
</span>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->.\etcd.exe&nbsp;--config-file&nbsp;.\conf\standalone.yml</div>
<span style="font-weight: normal;"><br />
<br />
<br />
3.docker<br />
</span></h2>
<h2><span style="font-weight: normal;">3.1单节点<br />
</span>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->SETLOCAL&nbsp;ENABLEEXTENSIONS<br />
<br />
SET&nbsp;REGISTRY=quay.io/coreos/etcd<br />
SET&nbsp;ETCD_VERSION=latest<br />
<br />
SET&nbsp;DATA_DIR=/etcd-data/standalone<br />
SET&nbsp;CLUSTER_STATE=new<br />
SET&nbsp;CLUSTER_TOKEN=etcd-standalone<br />
SET&nbsp;NODE_NAME=etcd-standalone<br />
<br />
docker&nbsp;run&nbsp;^<br />
&nbsp;&nbsp;-d&nbsp;--name&nbsp;%NODE_NAME%&nbsp;^<br />
&nbsp;&nbsp;--volume=%DATA_DIR%:/etcd-data&nbsp;^<br />
&nbsp;&nbsp;--publish&nbsp;2379:2379&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ALLOW_NONE_AUTHENTICATION=yes&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_NAME=%NODE_NAME%&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_DATA_DIR=%DATA_DIR%&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_ADVERTISE_CLIENT_URLS=<span style="color: #800000; ">"</span><span style="color: #800000; ">http://0.0.0.0:2379</span><span style="color: #800000; ">"</span>&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_LISTEN_CLIENT_URLS=<span style="color: #800000; ">"</span><span style="color: #800000; ">http://0.0.0.0:2379</span><span style="color: #800000; ">"</span>&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_CLUSTER_TOKEN=%CLUSTER_TOKEN%&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_CLUSTER_STATE=%CLUSTER_STATE%&nbsp;^<br />
&nbsp;&nbsp;bitnami/etcd:latest<br />
<br />
pause</div>
<span style="font-weight: normal;"><br />
3.2多节点<br />
</span>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->SETLOCAL&nbsp;ENABLEEXTENSIONS<br />
<br />
SET&nbsp;REGISTRY=quay.io/coreos/etcd<br />
SET&nbsp;ETCD_VERSION=latest<br />
<br />
SET&nbsp;DATA_DIR=/etcd-data/node01<br />
SET&nbsp;CLUSTER_STATE=new<br />
SET&nbsp;CLUSTER_TOKEN=etcd-cluster-test1<br />
SET&nbsp;NODE_NAME=etcd-node01<br />
<br />
docker&nbsp;run&nbsp;^<br />
&nbsp;&nbsp;-d&nbsp;--name&nbsp;%NODE_NAME%&nbsp;^<br />
&nbsp;&nbsp;--volume=%DATA_DIR%:/etcd-data&nbsp;^<br />
&nbsp;&nbsp;--publish&nbsp;2380:2380&nbsp;^<br />
&nbsp;&nbsp;--publish&nbsp;2379:2379&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ALLOW_NONE_AUTHENTICATION=yes&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_NAME=%NODE_NAME%&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_DATA_DIR=%DATA_DIR%&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_ADVERTISE_CLIENT_URLS=http://host.docker.internal:2379&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_ADVERTISE_PEER_URLS=http://host.docker.internal:2380&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_CLUSTER=etcd-node01=http://host.docker.internal:2380,etcd-node02=http://host.docker.internal:2381,etcd-node03=http://host.docker.internal:2382&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_CLUSTER_TOKEN=%CLUSTER_TOKEN%&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_CLUSTER_STATE=%CLUSTER_STATE%&nbsp;^<br />
&nbsp;&nbsp;bitnami/etcd:latest<br />
<br />
<br />
pause</div>
<span style="font-weight: normal;"><br />
</span>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->SETLOCAL&nbsp;ENABLEEXTENSIONS<br />
<br />
SET&nbsp;REGISTRY=quay.io/coreos/etcd<br />
SET&nbsp;ETCD_VERSION=latest<br />
<br />
SET&nbsp;DATA_DIR=/etcd-data/node02<br />
SET&nbsp;CLUSTER_STATE=new<br />
SET&nbsp;CLUSTER_TOKEN=etcd-cluster-test1<br />
SET&nbsp;NODE_NAME=etcd-node02<br />
<br />
docker&nbsp;run&nbsp;^<br />
&nbsp;&nbsp;-d&nbsp;--name&nbsp;%NODE_NAME%&nbsp;^<br />
&nbsp;&nbsp;--volume=%DATA_DIR%:/etcd-data&nbsp;^<br />
&nbsp;&nbsp;--publish&nbsp;2381:2381&nbsp;^<br />
&nbsp;&nbsp;--publish&nbsp;2378:2378&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ALLOW_NONE_AUTHENTICATION=yes&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_NAME=%NODE_NAME%&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_DATA_DIR=%DATA_DIR%&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2378&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_ADVERTISE_CLIENT_URLS=http://host.docker.internal:2378&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2381&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_ADVERTISE_PEER_URLS=http://host.docker.internal:2381&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_CLUSTER=etcd-node01=http://host.docker.internal:2380,etcd-node02=http://host.docker.internal:2381,etcd-node03=http://host.docker.internal:2382&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_CLUSTER_TOKEN=%CLUSTER_TOKEN%&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_CLUSTER_STATE=%CLUSTER_STATE%&nbsp;^<br />
&nbsp;&nbsp;bitnami/etcd:latest<br />
<br />
<br />
pause</div>
</h2>
<h2>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->SETLOCAL&nbsp;ENABLEEXTENSIONS<br />
<br />
SET&nbsp;REGISTRY=quay.io/coreos/etcd<br />
SET&nbsp;ETCD_VERSION=latest<br />
<br />
SET&nbsp;DATA_DIR=/etcd-data/node03<br />
SET&nbsp;CLUSTER_STATE=new<br />
SET&nbsp;CLUSTER_TOKEN=etcd-cluster-test1<br />
SET&nbsp;NODE_NAME=etcd-node03<br />
<br />
docker&nbsp;run&nbsp;^<br />
&nbsp;&nbsp;-d&nbsp;--name&nbsp;%NODE_NAME%&nbsp;^<br />
&nbsp;&nbsp;--volume=%DATA_DIR%:/etcd-data&nbsp;^<br />
&nbsp;&nbsp;--publish&nbsp;2382:2382&nbsp;^<br />
&nbsp;&nbsp;--publish&nbsp;2377:2377&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ALLOW_NONE_AUTHENTICATION=yes&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_NAME=%NODE_NAME%&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_DATA_DIR=%DATA_DIR%&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_LISTEN_CLIENT_URLS=<span style="color: #800000; ">"</span><span style="color: #800000; ">http://0.0.0.0:2377</span><span style="color: #800000; ">"</span>&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_ADVERTISE_CLIENT_URLS=<span style="color: #800000; ">"</span><span style="color: #800000; ">http://host.docker.internal:2377</span><span style="color: #800000; ">"</span>&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_LISTEN_PEER_URLS=<span style="color: #800000; ">"</span><span style="color: #800000; ">http://0.0.0.0:2382</span><span style="color: #800000; ">"</span>&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_ADVERTISE_PEER_URLS=<span style="color: #800000; ">"</span><span style="color: #800000; ">http://host.docker.internal:2382</span><span style="color: #800000; ">"</span>&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_CLUSTER=etcd-node01=http://host.docker.internal:2380,etcd-node02=http://host.docker.internal:2381,etcd-node03=http://host.docker.internal:2382&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_CLUSTER_TOKEN=%CLUSTER_TOKEN%&nbsp;^<br />
&nbsp;&nbsp;--env&nbsp;ETCD_INITIAL_CLUSTER_STATE=%CLUSTER_STATE%&nbsp;^<br />
&nbsp;&nbsp;bitnami/etcd:latest<br />
<br />
<br />
pause</div>
<span style="font-weight: normal;">
<br />
需要注意的是,Docker环境下,如果要本机访问,不能够使用127.0.0.1,Docker其实就是一个Linux虚拟机,所以如果要本机容器之间进行访问的话,那么就得用host.docker.internal来替换127.0.0.1,或者是创建一个网桥.<br />
<br /><br />以上的命令,我都已经形成了一个bat文件,下面提供下载:<br /><a href="/Files/tx7do/etcd-bat.zip">/Files/tx7do/etcd-bat.zip</a><br /><br /></span></h2><img src ="http://www.cppblog.com/tx7do/aggbug/217720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2021-06-19 05:11 <a href="http://www.cppblog.com/tx7do/archive/2021/06/19/217720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>远程桌面 CredSSP加密Oracle修正 解决方法</title><link>http://www.cppblog.com/tx7do/archive/2018/09/09/215913.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sun, 09 Sep 2018 06:35:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2018/09/09/215913.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215913.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2018/09/09/215913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215913.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215913.html</trackback:ping><description><![CDATA[<h1><a href="http://www.cnblogs.com/raswin/p/9018388.html" rel="nofollow" target="_blank" style="box-sizing: border-box; outline: 0px; color: #6795b5; text-decoration-line: none; cursor: pointer; word-break: break-all;">Win10远程桌面 出现 身份验证错误，要求的函数不受支持，这可能是由于CredSSP加密Oracle修正 解决方法</a></h1><div style="box-sizing: border-box; outline: 0px; margin: 0px; word-break: break-all; color: #333333; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; background-color: #ffffff;"><p style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 16px; font-size: 16px; color: #4f4f4f; line-height: 26px; text-align: justify; word-break: break-all;">升级至win10 最新版本10.0.17134，远程桌面连接Window Server时报错信息如下：</p><p style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 16px; font-size: 16px; color: #4f4f4f; line-height: 26px; text-align: justify; word-break: break-all;">出现身份验证错误，要求的函数不正确，这可能是由于CredSSP加密Oracle修正。</p><p style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 16px; font-size: 16px; color: #4f4f4f; line-height: 26px; text-align: justify; word-break: break-all;"><img src="https://images2018.cnblogs.com/blog/807693/201805/807693-20180509173052799-1726761131.png" alt="" style="box-sizing: border-box; outline: 0px; max-width: 100%; margin: 0px; word-break: break-all; cursor: zoom-in;" /></p><p style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 16px; font-size: 16px; color: #4f4f4f; line-height: 26px; text-align: justify; word-break: break-all;">解决方法：</p><p style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 16px; font-size: 16px; color: #4f4f4f; line-height: 26px; text-align: justify; word-break: break-all;">运行 gpedit.msc</p><p style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 16px; font-size: 16px; color: #4f4f4f; line-height: 26px; text-align: justify; word-break: break-all;">本地组策略：</p><p style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 16px; font-size: 16px; color: #4f4f4f; line-height: 26px; text-align: justify; word-break: break-all;">计算机配置&gt;管理模板&gt;系统&gt;凭据分配&gt;加密Oracle修正</p><p style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 16px; font-size: 16px; color: #4f4f4f; line-height: 26px; text-align: justify; word-break: break-all;">选择启用并选择易受攻击。</p><p style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 16px; font-size: 16px; color: #4f4f4f; line-height: 26px; text-align: justify; word-break: break-all;">&nbsp;</p><p style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 16px; font-size: 16px; color: #4f4f4f; line-height: 26px; text-align: justify; word-break: break-all;"><img src="https://images2018.cnblogs.com/blog/807693/201805/807693-20180509173055378-2066484289.png" alt="" style="box-sizing: border-box; outline: 0px; max-width: 100%; margin: 0px; word-break: break-all; cursor: zoom-in;" /><br /><br /><br /><br /><br /><br /><br /></p></div><img src ="http://www.cppblog.com/tx7do/aggbug/215913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2018-09-09 14:35 <a href="http://www.cppblog.com/tx7do/archive/2018/09/09/215913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2d-x 如何保持屏幕常亮</title><link>http://www.cppblog.com/tx7do/archive/2018/03/22/215559.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 22 Mar 2018 12:55:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2018/03/22/215559.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215559.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2018/03/22/215559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215559.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215559.html</trackback:ping><description><![CDATA[<strong> </strong><strong style="color: red;">转载自：https://blog.csdn.net/justforthedream/article/details/36902249<br /><br /><br /></strong><p style="margin-top: 10px; margin-bottom: 10px; background-color: #ffffff; padding: 0px; box-sizing: border-box; font-size: 13px; color: #4f4f4f; line-height: 24px; text-align: justify; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">貌似cocos2d-x没有接口直接做这个功能</p><p style="margin-top: 10px; margin-bottom: 10px; background-color: #ffffff; padding: 0px; box-sizing: border-box; font-size: 13px; color: #4f4f4f; line-height: 24px; text-align: justify; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">而各个平台又不一样，所以只能对于不同的平台做不同的设置</p><p style="margin-top: 10px; margin-bottom: 10px; background-color: #ffffff; padding: 0px; box-sizing: border-box; font-size: 13px; color: #4f4f4f; line-height: 24px; text-align: justify; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">首先android，在自己的activity的onCreate方法里添加一句getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);即可保持屏幕常亮</p><p style="margin-top: 10px; margin-bottom: 10px; background-color: #ffffff; padding: 0px; box-sizing: border-box; font-size: 13px; color: #4f4f4f; line-height: 24px; text-align: justify; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">其次ios，<span style="margin: 0px; padding: 0px; box-sizing: border-box; line-height: 1.5;">[ [ UIApplication sharedApplication ] setIdleTimerDisabled:YES ] ;这句加到AppController.mm文件的</span></p><div style="color: #454545; background-color: #ffffff; margin: 0px; box-sizing: border-box; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; box-sizing: border-box; font-size: 16px; color: #4f4f4f; line-height: 26px;">didFinishLaunchingWithOptions方法里面，添加到</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; box-sizing: border-box; font-size: 16px; color: #4f4f4f; line-height: 26px;"><span style="margin: 0px; padding: 0px; box-sizing: border-box;">[[</span><span style="margin: 0px; padding: 0px; box-sizing: border-box;">UIApplication</span>&nbsp;sharedApplication<span style="margin: 0px; padding: 0px; box-sizing: border-box;">]&nbsp;</span>setStatusBarHidden<span style="margin: 0px; padding: 0px; box-sizing: border-box;">:&nbsp;</span><span style="margin: 0px; padding: 0px; box-sizing: border-box;">YES</span><span style="margin: 0px; padding: 0px; box-sizing: border-box;">];这句后面就好。经测试，这个方法ok～</span></p></div><img src ="http://www.cppblog.com/tx7do/aggbug/215559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2018-03-22 20:55 <a href="http://www.cppblog.com/tx7do/archive/2018/03/22/215559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unity3D-使用Bitmap Font Generator自定义字体</title><link>http://www.cppblog.com/tx7do/archive/2017/12/25/215443.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 25 Dec 2017 03:00:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/12/25/215443.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215443.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/12/25/215443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215443.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215443.html</trackback:ping><description><![CDATA[<strong> </strong><strong style="color: red;">转载自:http://blog.csdn.net/wuming22222/article/details/51713350<br /><br /></strong><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">Bitmap Font Generator是一个开源免费软件，下载地址<a href="http://www.angelcode.com/products/bmfont/" target="_blank" style="box-sizing: border-box; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #ca0c16; text-decoration-line: none; margin: 0px; padding: 0px; outline: 0px;">http://www.angelcode.com/products/bmfont/</a>&nbsp;<br style="box-sizing: border-box;" />使用这个工具的过程中不要用中文目录&nbsp;<br style="box-sizing: border-box;" />一、将字母或数字做成字体&nbsp;<br style="box-sizing: border-box;" />1.这是美术给的图片&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619173830518" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" /></p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">2.打开BMFont, Edit&#8212;&gt;Open Image Manager&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619174016561" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" />&nbsp;<br style="box-sizing: border-box;" />打开Image&#8212;&gt;Import Image,在目录中选择上述图片37.png即&#8220;A&#8221;，并在Id处填写A对应的ASCII码值，点OK&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619174144132" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" />&nbsp;<br style="box-sizing: border-box;" />依次加入其他图片与对应的ASCII码值后，关闭窗口。&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619174418261" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" /></p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">3.导出设置&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619174543953" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" /></p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">Width与Height决定了最后导出的图片的长宽，以刚好囊括所有文字图片为宜，Texture决定了导出的图片的格式。设置好后，点击OK。</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">点击Options&#8212;&gt;Save bitmap font as ，导出,得到文件:&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619174731313" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" />&nbsp;<br style="box-sizing: border-box;" />当Bit depth设为8时，并不是我们想要的&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619174846220" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" /></p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">4.将这两个文件放到自己的Unity工程中，打开NGUI的FontMaker(NGUI&#8212;&gt;Open&#8212;&gt;FontMaker)&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619175020205" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" />&nbsp;<br style="box-sizing: border-box;" />在Output中设置我们的字体图片将要集成到哪个Atlas中去，然后点击Create the Font。</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">5.在Label中的使用&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619175132208" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" /></p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">6.最终效果&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619175233206" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" /></p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">二、聊天中的图文混排</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">1.首先获取常用字，在（<a href="http://www.china-language.gov.cn/wenziguifan2/shanghi/013.htm" target="_blank" style="box-sizing: border-box; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; color: #ca0c16; text-decoration-line: none; margin: 0px; padding: 0px; outline: 0px;">http://www.china-language.gov.cn/wenziguifan2/shanghi/013.htm</a>）中国语言文字网拷贝到txt文件中</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">Font.txt</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">1&gt;先将其中的副标题去掉&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619175524667" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" /></p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">2&gt;通过Notepad++中的[编辑-&gt;空白操作-&gt;移除非必需的空白和EOL] 和 文本文档中替换对话框 将文件中的空白消除。</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">3&gt;通过Notepad++中的[格式-&gt;转为UTF-8编码格式]将文本转换为UTF-8格式&nbsp;<br style="box-sizing: border-box;" />最后是这样的：&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619175628366" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" /></p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">2.打开软件设置中文字体&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619175739561" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" />&nbsp;<br style="box-sizing: border-box;" />将Font.txt中的文字导入进来，Edit&#8212;&gt;Select chars from file&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619175931125" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" /></p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">还可以通过多选框去选择一些其他需要添加的字,例如英文字母,数字</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">3.接下来的操作参考：一、中的3，4,5得到字体&nbsp;<br style="box-sizing: border-box;" />在制作Atlas的过程中注意MaxSize大小要大于等于BMFont生成的png图片的大小。&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619180224004" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" /></p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">4.将表情图片集成到字体所在的Atlas&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619180452022" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" />&nbsp;<br style="box-sizing: border-box;" />这些是在QQ中另存为得到的表情（正式项目中不要用马化腾的表情，版权问题）。</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">5.对字体Prefab做如下设置：&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619180617119" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" /></p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">其中的1是设置在chatFaceAtlas中存在的图片，2是图片对应的符号</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">4.在Label的text中写入值为&#8220;New Label@0@最快最直接&#8221;，最后效果图:&nbsp;<br style="box-sizing: border-box;" /><img src="http://img.blog.csdn.net/20160619180723260" alt="这里写图片描述" title="" style="box-sizing: border-box; border: 0px; vertical-align: middle; outline: 0px; margin-top: 15px; margin-bottom: 15px; max-width: 100%;" /></p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">三、使用BMFont的好处在于（官网写了10来条，我这里摘录几条）</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">1.Support for complete Unicode 8.0 character set, as well as 8 bit OEM character sets.</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">2.Optimal use of texture space, i.e. as little unused area as possible.</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">3.Support for kerning pairs.</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">4.Easy to use file format,eighter normal text file or xml files. Binary format is available for those that prefer that.</p><p style="margin: 0px 0px 1.7em; color: #3f3f3f; font-family: &quot;microsoft yahei&quot;; font-size: 16px; box-sizing: border-box; padding: 0px; line-height: 27.2px; word-wrap: break-word; word-break: normal;">5.8 bit or 32 bit texture output(TGA,PNG, and DDS files)</p><strong style="color: red;"><br /></strong><img src ="http://www.cppblog.com/tx7do/aggbug/215443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-12-25 11:00 <a href="http://www.cppblog.com/tx7do/archive/2017/12/25/215443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>免费的位图字体制作工具Bitmap Font Generator使用教程</title><link>http://www.cppblog.com/tx7do/archive/2017/12/24/215442.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sun, 24 Dec 2017 15:00:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/12/24/215442.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215442.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/12/24/215442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215442.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215442.html</trackback:ping><description><![CDATA[<div id="cnblogs_post_body" style="margin-bottom: 20px; word-break: break-word;"><div id="article_content"><p style="margin-top: 10px; margin-bottom: 10px;"><strong><span style="font-size: 18px;"><span style="font-family: 宋体;">转载请保留原地址&nbsp;<a href="http://www.cocos2dres.com/post/87.html" style="color: #444444; text-decoration-line: none;">http://www.cocos2dres.com/post/87.html</a>&nbsp;谢谢！！</span></span></strong></p><p style="margin-top: 10px; margin-bottom: 10px;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px;"><strong><span style="font-size: 18px;"><span style="font-family: 宋体;">首先 下载安装windows下免费的位图字体制作工具Bitmap Font Generator</span></span></strong></p><p style="margin-top: 10px; margin-bottom: 10px;">下载地址&nbsp;<a href="http://www.angelcode.com/products/bmfont/install_bmfont_1.13.exe" target="_blank" style="color: #444444; text-decoration-line: none;"><span style="font-size: 18px;">http://www.angelcode.com/products/bmfont/install_bmfont_1.13.exe</span></a><br /></p><p style="margin-top: 10px; margin-bottom: 10px;"><strong><span style="font-family: 新宋体;"><span style="font-size: 18px;">2 打开软件，选择Opotion-&gt;FontSetting，来设定需要导出的字体</span></span></strong></p><p style="margin-top: 10px; margin-bottom: 10px;"><span style="color: #66ff99;"><span style="background-color: #ffffff;"><span style="color: #000000; font-size: 18px;">我这里用微软雅黑。 Size可以设定字体大小，最好需要多大就设定多大，这里是32 Height可以设定字体的拉伸高度，保持默认100%就可以了</span></span></span></p><p style="margin-top: 10px; margin-bottom: 10px;"><img src="http://images.cnitblog.com/blog/148443/201304/09131800-7181d3ed825745c6bdd7834fe9225daf.png" alt="" style="border: 0px; max-width: 900px;" /><br /><span style="font-size: 18px;">3.&nbsp;<strong>选择菜单 Edit-&gt;Clear all chars in font 清空下字符</strong></span></p><p style="margin-top: 10px; margin-bottom: 10px;"><span style="font-size: 18px;">4.&nbsp;<strong>选择菜单 Edit-&gt;Selecting text from file... 选择一个文件，里面包含你想生成字体的文字</strong></span></p><p style="margin-top: 10px; margin-bottom: 10px;"><span style="font-family: 微软雅黑; font-size: 18px;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 14px;">生成一个*.Txt文本，里面包含你想要生成字体的文件,如下图</span></span></p><p style="margin-top: 10px; margin-bottom: 10px;"><span style="font-family: 微软雅黑; font-size: 18px;">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://images.cnitblog.com/blog/148443/201304/09131815-2b87491a16e04d2c86990f33ab91c46b.png" alt="" style="border: 0px; max-width: 900px;" /></span></p><p style="margin-top: 10px; margin-bottom: 10px;"><span style="font-size: 18px;">&nbsp;&nbsp;&nbsp; 选中刚才创建的txt文件，如果有提示失败，请检查txt文件是不是unicode或者utf-8编码的文件以及字体是否包含文本内的字体</span><br /><span style="font-size: 18px;">5.<strong>Option-&gt;ExportOptions来设定导出的样式等</strong></span></p><p style="margin-top: 10px; margin-bottom: 10px;">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://images.cnitblog.com/blog/148443/201304/09131825-43321bac0628492eb5fe6fad97c8108a.png" alt="" style="border: 0px; max-width: 900px;" /></p><p style="margin-top: 10px; margin-bottom: 10px;">这里解释一下几个重要的地方</p><p style="margin-top: 10px; margin-bottom: 10px;">Padding，文字的内边框，或者理解为文字的周边留空要多大 做后期样式时这个属性很重要，需要预留空间来给描边、发光等特效使用 比如我预计我的样式要加一个2px的边框，然后加一个右下角2px的投影效果，所以我设定了padding:2px 4px 4px 2px</p><p style="margin-top: 10px; margin-bottom: 10px;">BitDepth，必须32位，否则没有透明层</p><p style="margin-top: 10px; margin-bottom: 10px;">Presets，字体初始化的预设的颜色通道设定，也就是说字体的初始颜色设定是什么样的，建议都用白色字，可以直接设定为White text with alpha，即白色字透明底。</p><p style="margin-top: 10px; margin-bottom: 10px;">Font descript，字体描述文件，可以使用text或者xml&nbsp; 也就是fnt文件格式</p><p style="margin-top: 10px; margin-bottom: 10px;">Textures，纹理图片格式，果断png。<br /><span style="font-size: 18px;">6.option-&gt;Save bitmap font as...</span><br /><span style="font-size: 18px;">导出成一个文理文件和一个描述文件，如果按照上面的配置，会有一个*.png和一个*.fnt</span></p><p style="margin-top: 10px; margin-bottom: 10px;">&nbsp;&nbsp;这是导出后的png图片，为了看得清楚，我选择了黑色加透明 具体颜色视你的应用情况而定&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px;">&nbsp;<img src="http://images.cnitblog.com/blog/148443/201304/09131840-23441b78ccb7456aa866f32c841d543a.png" alt="" style="border: 0px; max-width: 900px;" /><br /><span style="font-size: 18px;">7.用photoshop处理导出的png文件 后期处理了 视自己的情况定，我这里就没有做处理</span></p><p style="margin-top: 10px; margin-bottom: 10px;"><span style="color: #ff0000; font-size: 24px;">&nbsp;&nbsp; 如果你在系统安装了一些艺术字体，然后现加上后期处理，你就可以创造出独特的字体！！！</span></p></div></div><div style="clear: both;"></div><div id="blog_post_info_block" style="margin-top: 20px;"><div id="BlogPostCategory" style="margin-bottom: 10px; font-family: verdana, sans-serif; font-size: 13px; background-color: #ffffff;"></div><div id="EntryTag" style="font-family: verdana, sans-serif; font-size: 13px; background-color: #ffffff; margin-top: 0px !important;"></div><div id="blog_post_info" style="font-family: verdana, sans-serif; font-size: 13px; background-color: #ffffff;"></div></div><img src ="http://www.cppblog.com/tx7do/aggbug/215442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-12-24 23:00 <a href="http://www.cppblog.com/tx7do/archive/2017/12/24/215442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>和Charles同样强大的iOS免费抓包工具mitmproxy</title><link>http://www.cppblog.com/tx7do/archive/2017/12/02/215385.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sat, 02 Dec 2017 11:34:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/12/02/215385.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215385.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/12/02/215385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215385.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215385.html</trackback:ping><description><![CDATA[<strong> </strong><strong style="color: red;">转载自:<a target="null">http://mrpeak.cn/blog/mitmproxy/</a></strong><br />
<br />
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">现阶段给iOS设备进行网络抓包的手段非常之多，除了我之前介绍的tcpdump，wireshark之外，还有Charles，以及和Charles同样好用的mitmproxy，其实还有更多，比如更小众的debookee。似乎知道Charles的同学更多一些，但其实Charles有的功能mitmproxy基本都有，mitmproxy还免费，而且对于terminal用户来说使用起来更亲近。</p>
<h3>如何使用mitmproxy？</h3>
<h5><span style="box-sizing: border-box;">安装mitmproxy</span></h5>
<p style="box-sizing: border-box; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">我们可以通过brew或者pip来安装mitmproxy，没有安装brew的同学可以先通过如下命令安装brew：</p>
<div style="box-sizing: border-box; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">
<div style="box-sizing: border-box;">
<pre style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; padding: 9.5px; margin-top: 0px; margin-bottom: 10px; line-height: 1.42857; color: #333333; word-break: break-all; word-wrap: break-word; background-color: #272822; border: 1px solid #cccccc; border-radius: 4px;"><code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0px; color: white; background-color: transparent; border-radius: 0px; display: block; width: auto; word-wrap: normal;">/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" </code></pre>
</div>
</div>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">完成之后，执行如下命令安装mitmproxy</p>
<div style="box-sizing: border-box; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">
<div style="box-sizing: border-box;">
<pre style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; padding: 9.5px; margin-top: 0px; margin-bottom: 10px; line-height: 1.42857; color: #333333; word-break: break-all; word-wrap: break-word; background-color: #272822; border: 1px solid #cccccc; border-radius: 4px;"><code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0px; color: white; background-color: transparent; border-radius: 0px; display: block; width: auto; word-wrap: normal;">brew install mitmproxy </code></pre>
</div>
</div>
<h5><span style="box-sizing: border-box;">使用mitmproxy抓包</span></h5>
<p style="box-sizing: border-box; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">第一步，首先启动mitmproxy，在terminal输入：</p>
<div style="box-sizing: border-box; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">
<div style="box-sizing: border-box;">
<pre style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; padding: 9.5px; margin-top: 0px; margin-bottom: 10px; line-height: 1.42857; color: #333333; word-break: break-all; word-wrap: break-word; background-color: #272822; border: 1px solid #cccccc; border-radius: 4px;"><code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0px; color: white; background-color: transparent; border-radius: 0px; display: block; width: auto; word-wrap: normal;">mitmproxy </code></pre>
</div>
</div>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">第二步，再在iPhone上设置http代理：</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><img src="http://www.mrpeak.cn/images/mp02.png" width="380" style="box-sizing: border-box; border: 0px; vertical-align: middle; display: block; max-width: 100%; height: auto;" alt="" /></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">IP地址填你Mac系统当前的IP，端口默认8080。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">可以通过在terminal输入ifconfig en0获取Mac的IP地址:</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><img src="http://www.mrpeak.cn/images/mp06.png" width="647" style="box-sizing: border-box; border: 0px; vertical-align: middle; display: block; max-width: 100%; height: auto;" alt="" /></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">第三步，第一次使用mitmproxy的时候需要在iPhone上安装CA证书，这一步和Charles一样都需要做，原因后面解释。打开iPhone Safari，输入地址：mitm.it，在下图中点击Apple安装证书。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><img src="http://www.mrpeak.cn/images/mp03.png" width="380" style="box-sizing: border-box; border: 0px; vertical-align: middle; display: block; max-width: 100%; height: auto;" alt="" /></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">第三步只需要做一次。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><span style="box-sizing: border-box; font-weight: 700;">观察mitmproxy流量</span></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">接下来我们就可以使用mitmproxy查看所有通过iPhone端的http请求了，包括https请求，如何破解https流量的后面也会分析。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">mitmproxy初看起来可能不如Charles直观，其实稍微把玩下就用起来很顺了，mitmproxy是基于terminal交互的，主要分为两个界面：请求列表界面和请求详情界面。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">请求列表界面</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><img src="http://www.mrpeak.cn/images/mp00.png" width="647" style="box-sizing: border-box; border: 0px; vertical-align: middle; display: block; max-width: 100%; height: auto;" alt="" /></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">请求详情界面</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><img src="http://www.mrpeak.cn/images/mp01.png" width="657" style="box-sizing: border-box; border: 0px; vertical-align: middle; display: block; max-width: 100%; height: auto;" alt="" /></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">大部分时候我们都是在这两个界面之间切换，切换方式也非常简单。可以在列表界面，用鼠标点击某个请求进入详情界面，但mitmproxy美妙之处在于可以用快捷键来完成界面的切换和功能的使用，而且快捷键与vim保持一致。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">所以我们可以：</p>
<ul style="box-sizing: border-box; margin-top: 0px; margin-bottom: 20px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">
     <li style="box-sizing: border-box;">在列表界面，按用j，k或者上下方向键在列表上浏览。</li>
     <li style="box-sizing: border-box;">在列表界面，按回车进入详情界面。</li>
     <li style="box-sizing: border-box;">在详情界面，按q，返回列表界面。</li>
     <li style="box-sizing: border-box;">在详情界面，按tab键或者h，l，在Request，Response，Detail三个tab之间切换。按j，k或者上下方向键可以滚动查看详情。</li>
     <li style="box-sizing: border-box;">在列表界面，按G跳到最新一个请求。</li>
     <li style="box-sizing: border-box;">在列表界面，按g跳到第一个请求。</li>
     <li style="box-sizing: border-box;">在列表界面，按d删除当前选中的请求，按D恢复刚才删除的请求。</li>
</ul>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">上面上面的几个快捷键就基本可以完成绝大部分的HTTP请求分析。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><span style="box-sizing: border-box; font-weight: 700;">拦截http请求</span></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">mitmproxy也可以拦截请求，操作起来也很方便。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">我们现在列表界面输入i，进入Intercept Filter模式。按esc可以退出intercept filter模式。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><img src="http://www.mrpeak.cn/images/mp07.png" width="647" style="box-sizing: border-box; border: 0px; vertical-align: middle; display: block; max-width: 100%; height: auto;" alt="" /></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">在intercept filter模式输入我们想要的filter就可以开始拦截了，比如我输入baidu\.com，按回车，所有域名中带baidu.com的请求就被拦截了，被拦截的请求会用橙色标记出来：</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><img src="http://www.mrpeak.cn/images/mp04.png" width="647" style="box-sizing: border-box; border: 0px; vertical-align: middle; display: block; max-width: 100%; height: auto;" alt="" /></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">请求拦截会后可以编辑后再发送，也可以直接放行，按a就直接放行了。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><span style="box-sizing: border-box; font-weight: 700;">编辑请求再发送</span></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">在上面拦截请求之后，我们可以编辑之后再发送。首先当选中被拦截的请求按回车进入详情页面，在详情页面按tab键可以在三个tab（Request，response，detail）之间切换，按e之后进入详情编辑模式：</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><img src="http://www.mrpeak.cn/images/mp05.png" width="647" style="box-sizing: border-box; border: 0px; vertical-align: middle; display: block; max-width: 100%; height: auto;" alt="" /></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">按e进入编辑模式之后，我们要进一步选择编辑的request部分，如下图箭头所示选中一个按对应的字母就可以了:</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><img src="http://www.mrpeak.cn/images/mp08.png" width="648" style="box-sizing: border-box; border: 0px; vertical-align: middle; display: block; max-width: 100%; height: auto;" alt="" /></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">之后就可以使用方向键或者h，j，,k，l，选中自己想要编辑的字段，回车之后就可以输入新内容，按esc退出当前编辑，按a可以再新建一个field，按d可以删除当前field，按esc退回上一个界面，下图为Request Header的edit界面：</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><img src="http://www.mrpeak.cn/images/mp09.png" width="648" style="box-sizing: border-box; border: 0px; vertical-align: middle; display: block; max-width: 100%; height: auto;" alt="" /></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">看着快捷键挺多，其实和vim非常相似，把玩个几分钟之后就可以熟练使用了，比Charles的图形界面点击起来要快捷很多。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">mitmproxy还有很多其他的功能，感兴趣的可以去<a href="https://mitmproxy.org/" style="box-sizing: border-box; background-color: transparent; color: #337ab7; text-decoration-line: none;">官网https://mitmproxy.org</a>查看。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">用一句话总结mitmproxy：<span style="box-sizing: border-box; font-weight: 700;">既免费又好用</span>。</p>
<h3>为何要安装CA证书？</h3>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">同Charles一样，mitmproxy也需要在iPhone设备上安装CA证书。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">这是因为mitmproxy要拦截解析https请求的话，要实施中间人攻击。正常情况下中间人攻击无法通过客户端的证书校验，mitmproxy的做法是临时实时的生成自己的证书，但这临时的证书要被客户端信任，就只能在iPhone设备上安装一个被信任的CA来签发临时的证书。也就是说，你信任了安装的mitmproxy的证书，也就信任了mitmproxy作为CA所签发的所有证书。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><span style="box-sizing: border-box; font-weight: 700;">但是，这是一个非常危险的行为。</span></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">安装信任第三方CA证书是个危险的行为，无论是Charles还是mitmproxy，信任之后，第三方就可以无条件实施中间人攻击了，你手机上很多App自以为安全的https连接通道都不再安全了，你的Safari通过https浏览的网页内容也可能被窃听了。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><span style="box-sizing: border-box; font-weight: 700;">所以，建议调试完之后在手机上删除第三方CA证书。</span></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">无论是Charles，还是mitmproxy，在调试完之后记得在【设置】-【通用】-【描述文件】中删除证书。</p>
<h3>mitmproxy是如何实施中间人攻击的？</h3>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">知其然还要知其所以然，学会用工具之后还要明白工具背后的原理，mitmproxy是如何实施中间人攻击的呢？</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">证书校验中一个重要环节是hostname验证。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; "><span style="box-sizing: border-box; font-weight: 700;">获取正确的hostname</span></p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">mitmproxy作为https代理，捕捉到手机端的请求之后，会发送一个同样的请求到server，并和server展开安全握手获取server的Certificate，再从Certificate中获取Common Name和Subject Alternative Name。签一个和Common Name，Subject Alternative Name一致的证书就可以骗过客户端了。所以即使客户端请求是使用的IP地址，这种方式也是行得通的。</p>
<h3>如何防止中间人攻击？</h3>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">iOS预防上述的中间人攻击也很简单，在客户端App做ssl pinning就可以了。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">ssl pining分为certificate pinning和public key pinning两种，目前主流的第三方HTTP framework（AFNetworking和Alamofire）都支持ssl pinning功能。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">做了证书或者公钥绑定之后，Charles和mitmproxy的https流量都无法正常获取了。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">另外我个人建议不光要做ssl pinning，任何经过https发送的内容App要再自己做一层加密，没有绝对的安全，保不准哪天https流量就被人破解了。</p>
<p style="box-sizing: border-box; margin: 20px 0px; color: #404040; font-family: -apple-system, Avenir, &quot;Helvetica Neue&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, STHeiti, &quot;Microsoft YaHei&quot;, &quot;Microsoft JhengHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;Source Han Sans CN&quot;, &quot;Noto Sans SC&quot;, &quot;Source Han Sans TC&quot;, &quot;Noto Sans CJK TC&quot;, &quot;WenQuanYi Micro Hei&quot;, SimSun, sans-serif; font-size: 16px; ">之前Path偷偷上传用户通讯录的丑闻就是因为，Path既没有做ssl pinning，也没有对上传的内容做加密，最后就只有程序员背锅了，这种事情产品经理又怎么会了解呢。</p>
<div></div>
<img src ="http://www.cppblog.com/tx7do/aggbug/215385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-12-02 19:34 <a href="http://www.cppblog.com/tx7do/archive/2017/12/02/215385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过 itms:services://? 在线安装ipa ，跨过app-store</title><link>http://www.cppblog.com/tx7do/archive/2017/10/27/215317.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Fri, 27 Oct 2017 14:23:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/10/27/215317.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215317.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/10/27/215317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215317.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215317.html</trackback:ping><description><![CDATA[<strong style="color: red;">转载自：http://www.cnblogs.com/sakura-panda/p/3628694.html</strong><br /><br /><div id="cnblogs_post_body" style="margin: 0px 0px 20px; word-break: break-word; font-family: &quot;microsoft yahei&quot;, &quot;Helvetica Neue&quot;, Helvetica, SimHei, STHeiti, STHeiTi, sans-serif;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">1.需要一个html文件,引导下载用户在线安装ipa<br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">html</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">head</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">title</span><span style="color: #0000FF; ">&gt;</span>一键安装掌上综调iPhone版<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">title</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">head</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">a&nbsp;</span><span style="color: #FF0000; ">href</span><span style="color: #0000FF; ">='itms-services://?action=download-manifest&amp;url=http://222.177.4.242/ios/d.plist'</span><span style="color: #0000FF; ">&gt;</span>一键安装掌上综调iPhone版<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">a</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">html</span><span style="color: #0000FF; ">&gt;</span></div><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">2.&nbsp;上文中的d.plist文件内容如下，其实它是一个XML文件，有关plist文件，请自行查阅google<br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;plist&nbsp;PUBLIC&nbsp;"-//Apple//DTD&nbsp;PLIST&nbsp;1.0//EN"&nbsp;"http://www.apple.com/DTDs/PropertyList-1.0.dtd"</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">plist&nbsp;</span><span style="color: #FF0000; ">version</span><span style="color: #0000FF; ">="1.0"</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>items<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">array</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>assets<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">array</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>kind<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>software-package<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>url<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>http://222.177.4.242/download?attachId=022DB5EAF88A57B175D24060DCD1BA70<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>kind<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>display-image<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>needs-shine<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">true</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>url<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>http://222.177.4.242/ios/icon.png<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>kind<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>full-size-image<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>needs-shine<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">true</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>url<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>http://222.177.4.242/ios/icon.png<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">array</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>metadata<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>bundle-identifier<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>com.ccssoft.mopclient.chongqing<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>bundle-version<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>1.0.0<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>kind<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>software<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>subtitle<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>掌上综调<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>title<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>掌上综调<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">array</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">plist</span><span style="color: #0000FF; ">&gt;</span></div><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">上面2中的http://222.177.4.242/download?attachId=022DB5EAF88A57B175D24060DCD1BA70&nbsp;这是ipa包所在的网络地址</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">3.自行找一个icon.png放在上面两个文件的同一个目录，此图片用作在iphone上显示程序图标。&nbsp;http://222.177.4.242/ios/icon.png</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">4.使用iphone&nbsp;safari浏览器，浏览http://222.177.4.242/ios/d.html文件，即可安装了。简单吧。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><strong style="margin: 0px; padding: 0px;">iOS 7.1下itms-services在线安装失败的解决方法</strong></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">iOS 7.1正式版发布了，之前使用itms-services://URL方式在线安装ipa文件的方法却失效了，点击的时候报错为：&#8220;无法安装应用程序，因xxx.com的证书无效&#8221;，这应该怎么解决呢？</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">其实iOS 7.1修改了manifest.plist文件的访问协议，之前可以通过http协议访问，在iOS 7.1之后必须使用https协议方式访问。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">比如之前的链接代码为：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">itms-services://?action=download-manifest&amp;url=<span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; color: #ff0000;"><strong style="margin: 0px; padding: 0px;">http</strong></span>:</span>//example.com/manifest.plist</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">在iOS 7.1之后，就需要修改为：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">itms-services://?action=download-manifest&amp;url=<span style="margin: 0px; padding: 0px; color: #ff0000;"><strong style="margin: 0px; padding: 0px;">https</strong></span>://example.com/manifest.plist</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">需要一个SSL证书才能够实现在线安装ipa文件的功能。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">&nbsp; &nbsp; &nbsp;//------------------- &nbsp;延伸： 关于https设置 ----------------------------------</p><blockquote style="margin-right: 0px; margin-left: 0px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">1.upload your app.plist to dropbox</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">2.get shared link of app.plist, like https://www.dropbox.com/s/qgknrfngaxazm38/app.plist</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">3.replace www.dropbox.com with dl.dropboxusercontent.com in the link, like https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">4.write your download.html like &lt;a href="itms-services://?action=download-manifest&amp;url=https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist"&gt;INSTALL!!&lt;/a&gt;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">5.upload the download.html to dropbox</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">6.get shared link of download.html, like https://www.dropbox.com/s/gnoctp7n9g0l3hx/download.html</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">7.replace www.dropbox.com with dl.dropboxusercontent.com in the second link as well, like https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">Now, visit https://dl.dropboxusercontent.com/s/gnoctp7n9g0l3hx/download.html in your device, you can install the app like before.</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">这个是通过上传dropbox来解决，事实上，只要找个可以以https方式共享外链的网盘，把plist文件上传就可以了！</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">上述方法通过测试可以解决提示&#8220;证书无效&#8221;的问题。下面介绍下步骤：</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">1、进入dropbox注册一个账号：https://www.dropbox.com/ &nbsp;，并根据官网提示安装dropbox</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">2、安装成功后会自动在桌面上的名为用户名的文件夹（WIN7）建立一个名为Dropbox的文件夹。将之前做好的plist文件复制到此文件夹中</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">3、plist文件左下角有蓝色图标表示正在同步，变为绿色图标表示完成同步。在plist文件上点击右键，选择&#8220;共享Dropbox链接&#8221;，会在状态栏中提示已复制到剪贴板</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">4、在记事本中粘贴出来，链接地址应为类似于：<span style="margin: 0px; padding: 0px;">https://www.dropbox.com/s/qgknrfngaxazm38/app.plist</span></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><span style="margin: 0px; padding: 0px;">5、将这个链接中<span style="margin: 0px; padding: 0px;">www.dropbox.com替换为<span style="margin: 0px; padding: 0px;">dl.dropboxusercontent.com，结果类似于：<span style="margin: 0px; padding: 0px;">https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist</span></span></span></span></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;">6、把这个链接替换itms:services://后url的参数，类似于：<span style="margin: 0px; padding: 0px;">&lt;a href="itms-services://?action=download-manifest&amp;url=https://dl.dropboxusercontent.com/s/qgknrfngaxazm38/app.plist"&gt;INSTALL!!&lt;/a&gt;</span></span></span></span></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><span style="margin: 0px; padding: 0px;">完毕。</span></p></div><div style="margin: 0px; clear: both; font-family: &quot;microsoft yahei&quot;, &quot;Helvetica Neue&quot;, Helvetica, SimHei, STHeiti, STHeiTi, sans-serif;"></div><div id="blog_post_info_block" style="margin: 20px 0px 0px; font-family: &quot;microsoft yahei&quot;, &quot;Helvetica Neue&quot;, Helvetica, SimHei, STHeiti, STHeiTi, sans-serif;"></div><img src ="http://www.cppblog.com/tx7do/aggbug/215317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-10-27 22:23 <a href="http://www.cppblog.com/tx7do/archive/2017/10/27/215317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>苹果开发者账号的区别，发布方式In-House和Ad Hoc区别</title><link>http://www.cppblog.com/tx7do/archive/2017/10/27/215316.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Fri, 27 Oct 2017 07:30:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/10/27/215316.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215316.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/10/27/215316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215316.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215316.html</trackback:ping><description><![CDATA[<strong style="color: red;">转载自：http://www.jianshu.com/p/87d9e4259846</strong><br /><br /><pre><div><div data-note-content=""><h2>开发者账号<br /> </h2><p>苹果开发者账号有<em><strong>个人版（$99/年），公司版<em><strong>（$99<em><strong>/年</strong></em>）</strong></em>和企业版</strong></em><em><strong>（$299<em><strong>/年</strong></em>）</strong></em>三种。</p><p>99美金属于<em><strong>标准计划</strong></em>；</p><p>标准计划还分为标准<strong><em>个人</em></strong>计划和标准<em><strong>公司</strong></em>计划，区别是：如登记为标准个人计划（个人开发者），则应用程序商店中的&#8220;seller name&#8221;将显示您个人的名称，如登记为标准公司计划（公司开发者）则应用程序商店中的&#8220;seller name&#8221;将显示公司的法定名称，同时您可以把其他会员添加到开发团队。</p><p>299美金属于<em><strong>企业计划</strong></em>。<br /></p><h4><strong>99美金个人开发者账号：</strong></h4><p>1、开发者能够自由地创造iPhone / iPod Touch/ iPad的商业应用，并且能够发布他们的应用程序（免费或收费）在App Store上</p><p>2、App Store中的&#8220;seller name&#8221;将显示您个人的名称</p><p>3、每年可以设置100台测试机做开发及测试用<br /></p><p>4、不允许开发人员创建一个团队</p><h4><strong>99美金公司<strong>开发者账号</strong>：</strong></h4><p>1、开发者能够自由地创造iPhone / iPod Touch/ iPad的商业应用，并且能够发布他们的应用程序（免费或收费）在App Store上<br /></p><p>2、App Store中的&#8220;seller name&#8221;将显示公司的法定名称</p><p>3、每年可以设置100台测试机做开发及测试用</p><p>4、允许开发人员创建一个团队，可以把其他成员添加到开发团队<br /></p><p>5、公司应在邓白氏注册并拥有有效的DUNS号码<br /></p><h4><strong>299美金企业开发者账号：</strong></h4><p>1、不允许该企业在App Store出售他们的应用程序</p><p>2、所开发的应用只能发给其雇员作内部使用</p><p>3、UDID数量不限制<br /></p><p>4、允许开发人员创建一个团队，团队成员添加到他们的帐户</p><p>5、公司应在邓白氏注册并拥有有效的DUNS号码（面向拥有500雇员以上的公司）<br /></p><h2>发布方式（4种）：</h2><p><em><strong>苹果应用商店发布（App Store）</strong></em></p><p><em><strong>苹果应用商店批量购买发布（Volume Purchase Program）</strong></em></p><p><em><strong>In-House企业应用发布：</strong></em></p><p>1、不能提交到App Store<br /></p><p>2、发布应用的具体内容不需要苹果官方审核<br /></p><p>3、安装设备的数量没有任何限制<em><strong><br /></strong></em></p><p>4、把程序放在网站中，提供给最终用户一个链接，他们就能够直接下载并自动安装了<em><strong><br /></strong></em></p><p><em><strong>Ad Hoc应用发布方式</strong></em></p><p>1、不能提交到App Store<br /></p><p>2、不需要经过苹果的评审，</p><p>3、限制每个应用不能发布到超过100个设备上<br /></p><p>4、把程序放在网站中，提供给最终用户一个链接，他们就能够直接下载并自动安装了<em><strong><br /></strong></em></p><p><em><strong><br /></strong></em></p><p><em><strong><em><strong><em><strong>In-House</strong></em>和Ad Hoc</strong></em>区别：安装设备数量限制</strong></em></p><div> <img src="http://upload-images.jianshu.io/upload_images/2198249-664107d72de17e2e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/2198249-664107d72de17e2e.png?imageMogr2/auto-orient/strip" data-image-slug="664107d72de17e2e" data-width="642" data-height="136" style="cursor: zoom-in;"  alt="" /><br /><div></div> </div>         </div>                   <div></div></div><br /><br />作者：Loki_<br />链接：http://www.jianshu.com/p/87d9e4259846<br />來源：简书<br />著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。</pre><img src ="http://www.cppblog.com/tx7do/aggbug/215316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-10-27 15:30 <a href="http://www.cppblog.com/tx7do/archive/2017/10/27/215316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>p12文件和mobileprovision文件导入到xcode如何使用</title><link>http://www.cppblog.com/tx7do/archive/2017/10/27/215315.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Fri, 27 Oct 2017 06:43:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/10/27/215315.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215315.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/10/27/215315.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215315.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215315.html</trackback:ping><description><![CDATA[<strong style="color: red;">转载自：http://blog.csdn.net/egostudio/article/details/51920253</strong><br />
<br />
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px; "><strong><span style="font-size: 18px;">要在别的电脑使用别人的苹果帐号打包app，需要两个文件：</span></strong></p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px; ">&#9679;该证书导出的&#8220;.p12&#8221;文件</p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px; ">&#9679;苹果开发者帐号中与&#8220;证书&#8221;对应的&#8220;描述文件&#8221;</p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px;"><br />
</p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px;"><span style="font-size: 18px;"><strong>如何安装到mac电脑：</strong></span></p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px;">1、将p12文件双击，会自动打开&#8220;钥匙串&#8221;工具，输入p12密码</p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px;">2、双击.mobileprovision描述文件，会自动安装到xcode中</p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px;"><br />
</p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px;"><strong><span style="font-size: 18px;">在xcode中分别选中Targets和Project，然后选中Build Settings标签，如下图修改code signing参数</span></strong></p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px;"><img src="http://img.blog.csdn.net/20160715185100904?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" style="border: none; max-width: 602px; height: auto;" /><br />
</p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px;"><br />
</p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px;"><br />
</p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px;">打包报错： A&nbsp;valid&nbsp;provisioning&nbsp;profile&nbsp;for&nbsp;this&nbsp;executable&nbsp;was&nbsp;not&nbsp;found.&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #555555; font-family: &quot;microsoft yahei&quot;; font-size: 15px;">解决办法：mobileprovision描述文件必须加入打包机器的udid。</p>
<div></div>
<img src ="http://www.cppblog.com/tx7do/aggbug/215315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-10-27 14:43 <a href="http://www.cppblog.com/tx7do/archive/2017/10/27/215315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How To Install Zabbix Server 3.0 on CentOS/RHEL 7/6/5</title><link>http://www.cppblog.com/tx7do/archive/2017/10/27/215314.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Fri, 27 Oct 2017 05:10:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/10/27/215314.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215314.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/10/27/215314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215314.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215314.html</trackback:ping><description><![CDATA[<strong> </strong><strong style="color: red;">转载自:https://tecadmin.net/install-zabbix-network-monitoring-on-centos-rhel-and-fedora/#</strong><br />
<br />
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">Zabbix</span>&nbsp;is an open source software for networks and application monitoring. Zabbix provides agents to monitor remote hosts as well as Zabbix includes support for monitoring via SNMP, TCP and ICMP checks. Click&nbsp;<a href="https://en.wikipedia.org/wiki/Zabbix" target="_blank" style="color: #ff8800; outline: none; text-decoration-line: none; transition: all 0.25s linear;">here</a>&nbsp;to know more about zabbix.</p>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><a href="https://tecadmin.net/wp-content/uploads/2013/11/Zabbix-Monitoring.png" style="color: #ff8800; outline: none; text-decoration-line: none; transition: all 0.25s linear;"><img size-full=""  wp-image-3146"="" alt="Zabbix-Monitoring" src="https://tecadmin.net/wp-content/uploads/2013/11/Zabbix-Monitoring.png" width="577" height="359" style="margin: 0px auto; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: middle; height: auto; max-width: 100%; display: block; clear: both;" /></a></p>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">This article will help you to step by step install Zabbix 3.0 Server on CentOS/RHEL 7/6/5 and Fedora Systems. Before starting installation read below basic requirements to run Zabbix 3.0 LTS.</p>
<ul style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; list-style-position: initial; list-style-image: initial; color: #555555; font-family: Poppins; ">
     <li style="margin: 0px 0px 0px 30px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">Apache:</span>&nbsp;1.3.12 or later.</li>
     <li style="margin: 0px 0px 0px 30px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">PHP:</span>&nbsp;5.4.0 or later (PHP 7 not supported).</li>
     <li style="margin: 0px 0px 0px 30px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">MySQL:</span>&nbsp;5.0.3 or later.</li>
     <li style="margin: 0px 0px 0px 30px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">OpenIPMI:</span>&nbsp;Required for IPMI support.</li>
     <li style="margin: 0px 0px 0px 30px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">libssh2:</span>&nbsp;Required for SSH support. Version 1.0 or higher.</li>
     <li style="margin: 0px 0px 0px 30px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">fping:</span>&nbsp;Required for ICMP ping items.</li>
     <li style="margin: 0px 0px 0px 30px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">libcurl:</span>&nbsp;Required for web monitoring.</li>
     <li style="margin: 0px 0px 0px 30px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">libiksemel:</span>&nbsp;Required for Jabber support.</li>
     <li style="margin: 0px 0px 0px 30px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">net-snmp:</span>&nbsp;Required for SNMP support.</li>
</ul>
<h2>Step 1 &#8211; SetUp Apache, MySQL and PHP</h2>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">In order to use Zabbix we required a Web Server, database server and PHP to work. In this steps we are going to set up these services, You many skip this step if you have already configured it.</p>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><span style="margin: 0px 0px 8px; padding: 0px; border: 0px; outline: 0px; font-size: 20px; vertical-align: baseline; line-height: 30px; font-weight: bolder; font-family: &quot;Roboto Condensed&quot;, Arial, sans-serif; color: #cc4a17;">Install All Services</span></p>
<pre style="margin-top: 24px; margin-bottom: 24px; padding: 10px; border-width: 1px 1px 1px 4px; border-style: solid; border-color: #0295ff; border-image: initial; outline: 0px; font-size: 0.9em; vertical-align: baseline; overflow-x: auto; overflow-y: hidden; color: #ffffff; background-color: #3c3f42; line-height: 1.5em; word-wrap: break-word;"># yum install httpd httpd-devel 
# yum install mysql mysql-server 
# yum install php php-cli php-common php-devel php-pear php-gd php-mbstring php-mysql php-xml </pre>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><span style="margin: 0px 0px 8px; padding: 0px; border: 0px; outline: 0px; font-size: 20px; vertical-align: baseline; line-height: 30px; font-weight: bolder; font-family: &quot;Roboto Condensed&quot;, Arial, sans-serif; color: #cc4a17;">Start All Services</span></p>
<pre style="margin-top: 24px; margin-bottom: 24px; padding: 10px; border-width: 1px 1px 1px 4px; border-style: solid; border-color: #0295ff; border-image: initial; outline: 0px; font-size: 0.9em; vertical-align: baseline; overflow-x: auto; overflow-y: hidden; color: #ffffff; background-color: #3c3f42; line-height: 1.5em; word-wrap: break-word;"># service httpd start 
# service mysqld start </pre>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><span style="margin: 0px 0px 8px; padding: 0px; border: 0px; outline: 0px; font-size: 20px; vertical-align: baseline; line-height: 30px; font-weight: bolder; font-family: &quot;Roboto Condensed&quot;, Arial, sans-serif; color: #cc4a17;">MySQL Initial Setup</span></p>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">Run following command to setup mysql initially and secure it</p>
<pre style="margin-top: 24px; margin-bottom: 24px; padding: 10px; border-width: 1px 1px 1px 4px; border-style: solid; border-color: #0295ff; border-image: initial; outline: 0px; font-size: 0.9em; vertical-align: baseline; overflow-x: auto; overflow-y: hidden; color: #ffffff; background-color: #3c3f42; line-height: 1.5em; word-wrap: break-word;"># mysql_secure_installation </pre>
<h2>Step 2 &#8211; Configure Yum Repository</h2>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">You can file zabbix repositories package on zabbix official&nbsp;<a href="http://repo.zabbix.com/zabbix/" target="_blank" style="color: #ff8800; outline: none; text-decoration-line: none; transition: all 0.25s linear;">website</a>. You can also use one of following commands to add zabbix repository in your system.</p>
<pre style="margin-top: 24px; margin-bottom: 24px; padding: 10px; border-width: 1px 1px 1px 4px; border-style: solid; border-color: #0295ff; border-image: initial; outline: 0px; font-size: 0.9em; vertical-align: baseline; overflow-x: auto; overflow-y: hidden; background-color: #3c3f42; line-height: 1.5em; word-wrap: break-word;"><orange style="color: orange;"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">CentOS/RHEL 7:</span></orange><font color="#ffffff"> 
# rpm -Uvh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
</font><orange><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;"><font color="#ffffff">
</font><font color="#ffa500"><strong>CentOS/RHEL 6:</strong></font></span></orange><font color="#ffffff"> 
# rpm -Uvh http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-release-3.0-1.el6.noarch.rpm
</font><orange><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;"><font color="#ffffff">
</font><font color="#ffa500"><strong>CentOS/RHEL 5:</strong></font></span></orange><font color="#ffffff"> 
# rpm -Uvh http://repo.zabbix.com/zabbix/3.0/rhel/5/x86_64/zabbix-release-3.0-1.el5.noarch.rpm </font></pre>
<h2>Step 3 &#8211; Install Zabbix Server with MySQL</h2>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">You have added zabbix yum repository in above step. Now use following command to install Zabbix server with mysql database support packages on your system.</p>
<pre style="margin-top: 24px; margin-bottom: 24px; padding: 10px; border-width: 1px 1px 1px 4px; border-style: solid; border-color: #0295ff; border-image: initial; outline: 0px; font-size: 0.9em; vertical-align: baseline; overflow-x: auto; overflow-y: hidden; color: #ffffff; background-color: #3c3f42; line-height: 1.5em; word-wrap: break-word;"># yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-java-gateway </pre>
<h2>Step 4 &#8211; Setup Zabbix Apache Configuration</h2>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">Zabbix creates its own apache configuration file&nbsp;<span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">/etc/httpd/conf.d/zabbix.conf</span>. Edit this file and just update timezone.&nbsp;<a href="https://php.net/manual/en/timezones.php" style="color: #ff8800; outline: none; text-decoration-line: none; transition: all 0.25s linear;">More timezone&#8217;s</a></p>
<pre style="margin-top: 24px; margin-bottom: 24px; padding: 10px; border-width: 1px 1px 1px 4px; border-style: solid; border-color: #0295ff; border-image: initial; outline: 0px; font-size: 0.9em; vertical-align: baseline; overflow-x: auto; overflow-y: hidden; border-radius: 5px; color: #ffffff; background-color: #3c3f42; line-height: 1.5em; word-wrap: break-word;"> php_value date.timezone Asia/Kolkata </pre>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">After changing value restart Apache service.</p>
<pre style="margin-top: 24px; margin-bottom: 24px; padding: 10px; border-width: 1px 1px 1px 4px; border-style: solid; border-color: #0295ff; border-image: initial; outline: 0px; font-size: 0.9em; vertical-align: baseline; overflow-x: auto; overflow-y: hidden; color: #ffffff; background-color: #3c3f42; line-height: 1.5em; word-wrap: break-word;"># service httpd restart </pre>
<h2>Step 5 &#8211; Create Zabbix MySQL Database</h2>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">This installation is using mysql as backend of zabbix, So we need to create MySQL database and User for zabbix installation.</p>
<pre style="margin-top: 24px; margin-bottom: 24px; padding: 10px; border-width: 1px 1px 1px 4px; border-style: solid; border-color: #0295ff; border-image: initial; outline: 0px; font-size: 0.9em; vertical-align: baseline; overflow-x: auto; overflow-y: hidden; color: #ffffff; background-color: #3c3f42; line-height: 1.5em; word-wrap: break-word;"># mysql -u root -p 

mysql&gt; CREATE DATABASE zabbixdb CHARACTER SET UTF8; 
mysql&gt; GRANT ALL PRIVILEGES on zabbixdb.* to zabbix@localhost IDENTIFIED BY 'password'; 
mysql&gt; FLUSH PRIVILEGES; 
mysql&gt; quit </pre>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">After creating database restore the default mysql database provided by zabbix. These files can be found at&nbsp;<span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">/usr/share/doc/zabbix-server-mysql-&lt;version&gt;/create/</span>&nbsp;directory.</p>
<pre style="margin-top: 24px; margin-bottom: 24px; padding: 10px; border-width: 1px 1px 1px 4px; border-style: solid; border-color: #0295ff; border-image: initial; outline: 0px; font-size: 0.9em; vertical-align: baseline; overflow-x: auto; overflow-y: hidden; color: #ffffff; background-color: #3c3f42; line-height: 1.5em; word-wrap: break-word;"># cd /usr/share/doc/zabbix-server-mysql-3.0.0/create 
<br /># mysql -u zabbix -p zabbixdb &lt; schema.sql 
# mysql -u zabbix -p zabbixdb &lt; images.sql 
# mysql -u zabbix -p zabbixdb &lt; data.sql </pre>
<h2>Step 6 &#8211; Start Zabbix Server</h2>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">After completing above setup, let&#8217;s start Zabbix server using following command.</p>
<pre style="margin-top: 24px; margin-bottom: 24px; padding: 10px; border-width: 1px 1px 1px 4px; border-style: solid; border-color: #0295ff; border-image: initial; outline: 0px; font-size: 0.9em; vertical-align: baseline; overflow-x: auto; overflow-y: hidden; color: #ffffff; background-color: #3c3f42; line-height: 1.5em; word-wrap: break-word;"># service zabbix-server start </pre>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">After starting zabbix service, let&#8217;s go to Zabbix web installer and finish the installation.</p>
<h2>Step 7 &#8211; Start Zabbix Web Installer</h2>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">Zabbix web installer can be access using following url, Change FQDN as per you setup.</p>
<pre style="margin-top: 24px; margin-bottom: 24px; padding: 10px; border-width: 1px 1px 1px 4px; border-style: solid; border-color: #0295ff; border-image: initial; outline: 0px; font-size: 0.9em; vertical-align: baseline; overflow-x: auto; overflow-y: hidden; color: #ffffff; background-color: #3c3f42; line-height: 1.5em; word-wrap: break-word;">http://<orange style="color: orange;">svr1.tecadmin.net</orange>/zabbix/ </pre>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">and follow the steps as per given screen shots below.</p>
<h3>Zabbix Setup Welcome Screen</h3>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">This is welcome screen of zabbix web installer. Go forward by click on&nbsp;<span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">next</span>&nbsp;button.</p>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><img src="https://tecadmin.net/wp-content/uploads/2016/05/zabbix3-install-1.png" alt="Install zabbix server step 1" width="550" height="360" size-full=""  wp-image-10251"="" style="margin: 0px auto; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: middle; height: auto; max-width: 100%; display: block; clear: both;" /></p>
<h3>Check for pre-requisities</h3>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">Check if your system have all required packages, if everything is ok click&nbsp;<span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">next</span>.</p>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><img src="https://tecadmin.net/wp-content/uploads/2016/05/zabbix3-install-2.png" alt="Install zabbix server step 2" width="600" height="400" size-full=""  wp-image-10252"="" style="margin: 0px auto; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: middle; height: auto; max-width: 100%; display: block; clear: both;" /></p>
<h3>Configure DB Connection</h3>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">Enter database details created in Step #4 and click&nbsp;<span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">Next step</span>.</p>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><img src="https://tecadmin.net/wp-content/uploads/2016/05/zabbix3-install-3.png" alt="Install zabbix server step 3" width="600" height="400" size-full=""  wp-image-10253"="" style="margin: 0px auto; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: middle; height: auto; max-width: 100%; display: block; clear: both;" /></p>
<h3>Zabbix Server Details</h3>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><img src="https://tecadmin.net/wp-content/uploads/2016/05/zabbix3-install-4.png" alt="Install zabbix server step 4" width="600" height="400" size-full=""  wp-image-10254"="" style="margin: 0px auto; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: middle; height: auto; max-width: 100%; display: block; clear: both;" /></p>
<h3>Pre-Installation Summary</h3>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">In this step will show the summary you have entered previous steps, so simply click&nbsp;<span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">next</span>.</p>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><img src="https://tecadmin.net/wp-content/uploads/2016/05/zabbix3-install-5.png" alt="Install zabbix server step 5" width="600" height="400" size-full=""  wp-image-10255"="" style="margin: 0px auto; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: middle; height: auto; max-width: 100%; display: block; clear: both;" /></p>
<h3>Install Zabbix</h3>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><img src="https://tecadmin.net/wp-content/uploads/2016/05/zabbix3-install-6.png" alt="Install zabbix server step 6" width="600" height="400" size-full=""  wp-image-10256"="" style="margin: 0px auto; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: middle; height: auto; max-width: 100%; display: block; clear: both;" /></p>
<h3>Zabbix Login Screen</h3>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">Login to Zabbix using below default credentials.</p>
<pre style="margin-top: 24px; margin-bottom: 24px; padding: 10px; border-width: 1px 1px 1px 4px; border-style: solid; border-color: #0295ff; border-image: initial; outline: 0px; font-size: 0.9em; vertical-align: baseline; overflow-x: auto; overflow-y: hidden; border-radius: 5px; color: #ffffff; background-color: #3c3f42; line-height: 1.5em; word-wrap: break-word;"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">Username: admin</span> 
<span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">Password: zabbix</span> </pre>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><img src="https://tecadmin.net/wp-content/uploads/2016/05/zabbix3-install-7.png" alt="Install zabbix server step 7" width="600" height="400" size-full=""  wp-image-10257"="" style="margin: 0px auto; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: middle; height: auto; max-width: 100%; display: block; clear: both;" /></p>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; ">After successful login you will get zabbix dashboard like below.</p>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><img src="https://tecadmin.net/wp-content/uploads/2016/05/zabbix3-install-8.png" alt="Install zabbix server step 8" width="600" height="400" size-full=""  wp-image-10258"="" style="margin: 0px auto; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: middle; height: auto; max-width: 100%; display: block; clear: both;" /></p>
<p style="margin: 0px 0px 20px; padding: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; color: #555555; font-family: Poppins; "><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-weight: 700;">Congratulation!</span>&nbsp;Your Zabbix setup has been completed. Read our next article to&nbsp;<a href="https://tecadmin.net/install-zabbix-agent-on-centos-rhel/" style="color: #ff8800; outline: none; text-decoration-line: none; transition: all 0.25s linear;">install zabbix agent</a>&nbsp;and&nbsp;<a href="https://tecadmin.net/add-host-zabbix-server-monitor/" target="_blank" style="color: #ff8800; outline: none; text-decoration-line: none; transition: all 0.25s linear;">add host in zabbix server</a>.</p>
<div apss-theme-1="" counter-enable="" apss-buttons-left=""  clearfix"="" style="margin: 0px; border: 0px; outline: 0px; font-size: 16px; vertical-align: baseline; font-family: &quot;Open Sans&quot;, sans-serif; color: #555555; ">
<div style="margin: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;">
<div apss-single-icon"="" style="margin: 0px; border: 0px; outline: 0px; font-size: inherit; vertical-align: middle; display: inline-block;"><a rel="nofollow" title="Share on Facebook" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https://tecadmin.net/install-zabbix-network-monitoring-on-centos-rhel-and-fedora/" style="color: #ff8800; outline: none; text-decoration-line: none; transition: all 0.25s linear; position: relative; display: block; float: left; margin: 10px 10px 10px 0px;"></a></div>
</div>
</div><img src ="http://www.cppblog.com/tx7do/aggbug/215314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-10-27 13:10 <a href="http://www.cppblog.com/tx7do/archive/2017/10/27/215314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Centos 6 Zabbix : Install</title><link>http://www.cppblog.com/tx7do/archive/2017/10/27/215313.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Fri, 27 Oct 2017 05:00:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/10/27/215313.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215313.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/10/27/215313.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215313.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215313.html</trackback:ping><description><![CDATA[<strong style="color: red;">转载自:https://www.server-world.info/en/note?os=CentOS_6&amp;p=zabbix</strong><br />
<br />
<table summary="1" style="margin: 0px 0px 0px; padding: 0px; border-spacing: 0px; width: 1519px; background-image: url(&quot;../img/bgcom.gif&quot;); background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; line-height: 1.5; font-size: 14px; font-family: Tahoma, Arial, sans-serif; color: #000000; letter-spacing: 1px;">
     <tbody style="margin: 0px; padding: 0px;">
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 0px 0px 0px 0px; width: 30px; text-align: right; vertical-align: top;">&nbsp;</td>
             <td style="margin: 0px; padding: 0px;">
             <div style="margin: 0px 0px 0px;">Install Zabbix which is an enterprise open source monitoring system.<br style="margin: 0px; padding: 0px;" />
             It's possible to monitor not only Linux but Windows, Solaris, IBM AIX and others.</div>
             </td>
         </tr>
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 0px 10px 0px 0px; width: 30px; text-align: right; vertical-align: top;">[1]</td>
             <td style="margin: 0px; padding: 0px;">
             <div style="margin: 0px 0px 0px;"><a href="https://www.server-world.info/en/note?os=CentOS_6&amp;p=httpd&amp;f=1" style="margin: 0px; padding: 0px; color: #003399; text-decoration-line: none;">Install Apache httpd, refer to here</a>.</div>
             </td>
         </tr>
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 0px 10px 0px 0px; width: 30px; text-align: right; vertical-align: top;">[2]</td>
             <td style="margin: 0px; padding: 0px;">
             <div style="margin: 0px 0px 0px;"><a href="https://www.server-world.info/en/note?os=CentOS_6&amp;p=httpd&amp;f=2" style="margin: 0px; padding: 0px; color: #003399; text-decoration-line: none;">Install PHP, refer to here</a>.</div>
             </td>
         </tr>
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 0px 10px 0px 0px; width: 30px; text-align: right; vertical-align: top;">[3]</td>
             <td style="margin: 0px; padding: 0px;">
             <div style="margin: 0px 0px 0px;"><a href="https://www.server-world.info/en/note?os=CentOS_6&amp;p=mysql&amp;f=1" style="margin: 0px; padding: 0px; color: #003399; text-decoration-line: none;">Install MySQL server, refer to here</a>.</div>
             </td>
         </tr>
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 0px 10px 0px 0px; width: 30px; text-align: right; vertical-align: top;">[4]</td>
             <td style="margin: 0px; padding: 0px;">Install some other required packages and Zabbix repository.</td>
         </tr>
     </tbody>
</table>
<table summary="1-1" style="margin: 0px 0px 0px; padding: 0px; border-spacing: 0px; position: relative; width: 1519px; background: #191919; color: #000000; font-family: Tahoma, Arial, sans-serif; font-size: 14px; letter-spacing: 1px;">
     <tbody style="margin: 0px; padding: 0px;">
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 10px; font-family: Consolas, &quot;Courier New&quot;, Courier, Monaco, monospace; font-weight: bold; color: #ffffff; letter-spacing: 0px; line-height: 1.4;">[root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;"><a href="https://www.server-world.info/en/command/html/yum.html" style="margin: 0px; padding: 0px; color: #ffff00; text-decoration-line: none;">yum</a>&nbsp;-y install php-mysql php-gd php-xml php-bcmath&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             [root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;"><a href="https://www.server-world.info/en/command/html/yum.html" style="margin: 0px; padding: 0px; color: #ffff00; text-decoration-line: none;">yum</a>&nbsp;-y install http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm</div>
             </td>
         </tr>
     </tbody>
</table>
<br />
<table summary="5" style="margin: 0px 0px 0px; padding: 0px; border-spacing: 0px; width: 1519px; background-image: url(&quot;../img/bgcom.gif&quot;); background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; line-height: 1.5; font-size: 14px; font-family: Tahoma, Arial, sans-serif; color: #000000; letter-spacing: 1px;">
     <tbody style="margin: 0px; padding: 0px;">
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 0px 10px 0px 0px; width: 30px; text-align: right; vertical-align: top;">[5]</td>
             <td style="margin: 0px; padding: 0px;">Install Zabbix server.<br style="margin: 0px; padding: 0px;" />
             Install Zabbix Agent to monitor Zabbix server itself, too.</td>
         </tr>
     </tbody>
</table>
<table summary="5-1" style="margin: 0px 0px 0px; padding: 0px; border-spacing: 0px; position: relative; width: 1519px; background: #191919; color: #000000; font-family: Tahoma, Arial, sans-serif; font-size: 14px; letter-spacing: 1px;">
     <tbody style="margin: 0px; padding: 0px;">
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 10px; font-family: Consolas, &quot;Courier New&quot;, Courier, Monaco, monospace; font-weight: bold; color: #ffffff; letter-spacing: 0px; line-height: 1.4;">[root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;"><a href="https://www.server-world.info/en/command/html/yum.html" style="margin: 0px; padding: 0px; color: #ffff00; text-decoration-line: none;">yum</a>&nbsp;-y install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix_get</div>
             </td>
         </tr>
     </tbody>
</table>
<br />
<table summary="6" style="margin: 0px 0px 0px; padding: 0px; border-spacing: 0px; width: 1519px; background-image: url(&quot;../img/bgcom.gif&quot;); background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; line-height: 1.5; font-size: 14px; font-family: Tahoma, Arial, sans-serif; color: #000000; letter-spacing: 1px;">
     <tbody style="margin: 0px; padding: 0px;">
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 0px 10px 0px 0px; width: 30px; text-align: right; vertical-align: top;">[6]</td>
             <td style="margin: 0px; padding: 0px;">Create a database for Zabbix.</td>
         </tr>
     </tbody>
</table>
<table summary="6-1" style="margin: 0px 0px 0px; padding: 0px; border-spacing: 0px; position: relative; width: 1519px; background: #191919; color: #000000; font-family: Tahoma, Arial, sans-serif; font-size: 14px; letter-spacing: 1px;">
     <tbody style="margin: 0px; padding: 0px;">
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 10px; font-family: Consolas, &quot;Courier New&quot;, Courier, Monaco, monospace; font-weight: bold; color: #ffffff; letter-spacing: 0px; line-height: 1.4;">[root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">mysql -u root -p&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             <pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; font-family: Consolas, Courier, Monaco, monospace;">Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 5.1.73 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. </pre>
             <div style="margin: 0px 0px 21px;">mysql&gt;&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">create database zabbix;&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             Query OK, 1 row affected (0.00 sec)</div>
             <div style="margin: 0px 0px 21px;">mysql&gt;&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">grant all privileges on zabbix.* to zabbix@'localhost' identified by 'password';&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             Query OK, 0 rows affected (0.00 sec)</div>
             <div style="margin: 0px 0px 21px;">mysql&gt;&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">grant all privileges on zabbix.* to zabbix@'%' identified by 'password';&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             Query OK, 0 rows affected (0.00 sec)</div>
             <div style="margin: 0px 0px 21px;">mysql&gt;&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">flush privileges;&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             Query OK, 0 rows affected (0.00 sec)</div>
             <div style="margin: 0px 0px 21px;">mysql&gt;&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">exit&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             Bye</div>
             [root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;"><a href="https://www.server-world.info/en/command/html/cd.html" style="margin: 0px; padding: 0px; color: #ffff00; text-decoration-line: none;">cd</a>&nbsp;/usr/share/doc/zabbix-server-mysql-*/create&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             [root@dlp create]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">mysql -u root -p zabbix &lt; schema.sql&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             Enter password:<br style="margin: 0px; padding: 0px;" />
             [root@dlp create]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">mysql -u root -p zabbix &lt; images.sql&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             Enter password:<br style="margin: 0px; padding: 0px;" />
             [root@dlp create]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">mysql -u root -p zabbix &lt; data.sql&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             Enter password:<br style="margin: 0px; padding: 0px;" />
             </td>
         </tr>
     </tbody>
</table>
<table summary="7" style="margin: 0px 0px 0px; padding: 0px; border-spacing: 0px; width: 1519px; background-image: url(&quot;../img/bgcom.gif&quot;); background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; line-height: 1.5; font-size: 14px; font-family: Tahoma, Arial, sans-serif; color: #000000; letter-spacing: 1px;">
     <tbody style="margin: 0px; padding: 0px;">
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 0px 10px 0px 0px; width: 30px; text-align: right; vertical-align: top;">[7]</td>
             <td style="margin: 0px; padding: 0px;">Configure and start Zabbix server.</td>
         </tr>
     </tbody>
</table>
<table summary="7-1" style="margin: 0px 0px 0px; padding: 0px; border-spacing: 0px; position: relative; width: 1519px; background: #191919; color: #000000; font-family: Tahoma, Arial, sans-serif; font-size: 14px; letter-spacing: 1px;">
     <tbody style="margin: 0px; padding: 0px;">
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 10px; font-family: Consolas, &quot;Courier New&quot;, Courier, Monaco, monospace; font-weight: bold; color: #ffffff; letter-spacing: 0px; line-height: 1.4;">
             <div style="margin: 0px 0px 21px;">[root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;"><a href="https://www.server-world.info/en/command/html/vi.html" style="margin: 0px; padding: 0px; color: #ffff00; text-decoration-line: none;">vi</a>&nbsp;/etc/zabbix/zabbix_server.conf</div>
             </div>
             <div style="margin: 0px 0px 0px;">
             <div style="margin: 0px; display: inline; color: #ffb6c1;"># line 73: add</div>
             <br style="margin: 0px; padding: 0px;" />
             <div style="margin: 0px; display: inline; color: #98fb98;">DBHost=localhost</div>
             </div>
             <div style="margin: 0px 0px 0px;">
             <div style="margin: 0px; display: inline; color: #ffb6c1;"># line 107: add DB password for Zabbix</div>
             <br style="margin: 0px; padding: 0px;" />
             <div style="margin: 0px; display: inline; color: #98fb98;">DBPassword=password</div>
             </div>
             [root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">/etc/rc.d/init.d/zabbix-server start&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             Starting ZABBIX server:
             <div style="margin: 0px; padding-left: 30px; display: inline;">[ OK ]</div>
             <br style="margin: 0px; padding: 0px;" />
             [root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;"><a href="https://www.server-world.info/en/command/html/chkconfig.html" style="margin: 0px; padding: 0px; color: #ffff00; text-decoration-line: none;">chkconfig</a>&nbsp;zabbix-server on&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             </td>
         </tr>
     </tbody>
</table>
<br />
<table summary="8" style="margin: 0px 0px 0px; padding: 0px; border-spacing: 0px; width: 1519px; background-image: url(&quot;../img/bgcom.gif&quot;); background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; line-height: 1.5; font-size: 14px; font-family: Tahoma, Arial, sans-serif; color: #000000; letter-spacing: 1px;">
     <tbody style="margin: 0px; padding: 0px;">
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 0px 10px 0px 0px; width: 30px; text-align: right; vertical-align: top;">[8]</td>
             <td style="margin: 0px; padding: 0px;">Configure and start Zabbix Agent to monitor Zabbix server itself.</td>
         </tr>
     </tbody>
</table>
<table summary="8-1" style="margin: 0px 0px 0px; padding: 0px; border-spacing: 0px; position: relative; width: 1519px; background: #191919; color: #000000; font-family: Tahoma, Arial, sans-serif; font-size: 14px; letter-spacing: 1px;">
     <tbody style="margin: 0px; padding: 0px;">
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 10px; font-family: Consolas, &quot;Courier New&quot;, Courier, Monaco, monospace; font-weight: bold; color: #ffffff; letter-spacing: 0px; line-height: 1.4;">
             <div style="margin: 0px 0px 21px;">[root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;"><a href="https://www.server-world.info/en/command/html/vi.html" style="margin: 0px; padding: 0px; color: #ffff00; text-decoration-line: none;">vi</a>&nbsp;/etc/zabbix/zabbix_agentd.conf</div>
             </div>
             <div style="margin: 0px 0px 0px;">
             <div style="margin: 0px; display: inline; color: #ffb6c1;"># line 85: specify Zabbix server</div>
             <br style="margin: 0px; padding: 0px;" />
             Server=
             <div style="margin: 0px; display: inline; color: #98fb98;">127.0.0.1</div>
             </div>
             <div style="margin: 0px 0px 0px;">
             <div style="margin: 0px; display: inline; color: #ffb6c1;"># line 126: specify Zabbix server</div>
             <br style="margin: 0px; padding: 0px;" />
             ServerActive=
             <div style="margin: 0px; display: inline; color: #98fb98;">127.0.0.1</div>
             </div>
             <div style="margin: 0px 0px 0px;">
             <div style="margin: 0px; display: inline; color: #ffb6c1;"># line 137: change to the own hostname</div>
             <br style="margin: 0px; padding: 0px;" />
             Hostname=
             <div style="margin: 0px; display: inline; color: #98fb98;">dlp.srv.world</div>
             </div>
             [root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">/etc/rc.d/init.d/zabbix-agent start&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             Starting ZABBIX agent:
             <div style="margin: 0px; padding-left: 30px; display: inline;">[ OK ]</div>
             <br style="margin: 0px; padding: 0px;" />
             [root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;"><a href="https://www.server-world.info/en/command/html/chkconfig.html" style="margin: 0px; padding: 0px; color: #ffff00; text-decoration-line: none;">chkconfig</a>&nbsp;zabbix-agent on&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             </td>
         </tr>
     </tbody>
</table>
<br />
<table summary="9" style="margin: 0px 0px 0px; padding: 0px; border-spacing: 0px; width: 1519px; background-image: url(&quot;../img/bgcom.gif&quot;); background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; line-height: 1.5; font-size: 14px; font-family: Tahoma, Arial, sans-serif; color: #000000; letter-spacing: 1px;">
     <tbody style="margin: 0px; padding: 0px;">
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 0px 10px 0px 0px; width: 30px; text-align: right; vertical-align: top;">[9]</td>
             <td style="margin: 0px; padding: 0px;">Change httpd settings like follows.</td>
         </tr>
     </tbody>
</table>
<table summary="9-1" style="margin: 0px 0px 0px; padding: 0px; border-spacing: 0px; position: relative; width: 1519px; background: #191919; color: #000000; font-family: Tahoma, Arial, sans-serif; font-size: 14px; letter-spacing: 1px;">
     <tbody style="margin: 0px; padding: 0px;">
         <tr style="margin: 0px; padding: 0px;">
             <td style="margin: 0px; padding: 10px; font-family: Consolas, &quot;Courier New&quot;, Courier, Monaco, monospace; font-weight: bold; color: #ffffff; letter-spacing: 0px; line-height: 1.4;">
             <div style="margin: 0px 0px 21px;">[root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;"><a href="https://www.server-world.info/en/command/html/vi.html" style="margin: 0px; padding: 0px; color: #ffff00; text-decoration-line: none;">vi</a>&nbsp;/etc/httpd/conf.d/zabbix.conf</div>
             </div>
             <div style="margin: 0px 0px 0px;">
             <div style="margin: 0px; display: inline; color: #ffb6c1;"># line 11: change access permittion for Zabbix frontend</div>
             <br style="margin: 0px; padding: 0px;" />
             Allow from&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">localhost 10.0.0.0/24</div>
             </div>
             <div style="margin: 0px 0px 0px;">
             <div style="margin: 0px; display: inline; color: #ffb6c1;"># line 18: uncomment and change to your timezone</div>
             <br style="margin: 0px; padding: 0px;" />
             php_value date.timezone&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">Asia/Tokyo</div>
             </div>
             [root@dlp ~]#&nbsp;
             <div style="margin: 0px; display: inline; color: #98fb98;">/etc/rc.d/init.d/httpd restart&nbsp;</div>
             <br style="margin: 0px; padding: 0px;" />
             Stopping httpd:
             <div style="margin: 0px; padding-left: 30px; display: inline;">[ OK ]</div>
             <br style="margin: 0px; padding: 0px;" />
             Starting httpd:
             <div style="margin: 0px; padding-left: 30px; display: inline;">[ OK ]</div>
             </td>
         </tr>
     </tbody>
</table>
<img src ="http://www.cppblog.com/tx7do/aggbug/215313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-10-27 13:00 <a href="http://www.cppblog.com/tx7do/archive/2017/10/27/215313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ios开发证书CSR文件、CER文件、P12文件，mobileprovition许可文件的用途</title><link>http://www.cppblog.com/tx7do/archive/2017/10/27/215312.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Fri, 27 Oct 2017 04:56:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/10/27/215312.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215312.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/10/27/215312.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215312.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215312.html</trackback:ping><description><![CDATA[<strong style="color: red;">转载自:http://blog.csdn.net/flylovesky127/article/details/44078803</strong><br />
<br />
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;"><strong>1.CSR文件</strong></span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">&nbsp;&nbsp;&nbsp;钥匙串文件，为生成证书做基础，要生成CER证书必须要有CSR私钥，此私钥包含了用户自己的一些信息。</span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;"><strong>2.开发证书 CER文件</strong></span></span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">&nbsp;&nbsp;&nbsp;苹果的这个开发者证书也是同样的原理，本地的request文件里包含开发者的个人信息和公钥，提交给苹果。</span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">&nbsp;&nbsp;&nbsp;然后经过一系列的操作后最终可以得到一个可用的证书文件（CER文件）。所以这个CER证书里包含了开发者信息和公钥。</span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">&nbsp;&nbsp;&nbsp;当开发者下载并双击打开后，这个文件会出现在钥匙串里。它与本地钥匙串里的私钥匹配之后，开发者就可以使用它了。</span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">&nbsp;&nbsp;&nbsp;另外开发者证书是有develop版，和distribution版本的。</span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">develop版主要是用于开发者调试真机来使用；distribution版本是用来分发版本用的，包括（adhoc 和 app store）。</span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;"><strong>3.证书P12文件</strong></span></span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">&nbsp;&nbsp;&nbsp;当CER安装到本地并与本机的私钥吻合之后。我们一般会给证书做个备份，这个备份就是个P12文件。</span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">&nbsp;&nbsp;&nbsp;这个p12文件很好用，它不仅包含CER的信息，还有私钥信息，即： P12备份文件 = CER文件&nbsp;&nbsp;+ 私钥；所以有了这个p12就再也不用担心证书丢失了。</span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;"><strong>4.mobileprovition文件</strong></span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">&nbsp;&nbsp;&nbsp;如果说开发证书让苹果相信了你是一个合法的开发者的话，那么这个许可证就是为了让</span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">&nbsp;&nbsp;&nbsp;你调试的真机设备（iPhone，ipad）被认为是个合法的测试设备。这个许可证就是设备的信任凭证。</span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">&nbsp;&nbsp;&nbsp;当APP安装到真机上的时候，APP里的许可证信息和iPhone里的许可证如果匹配的话，就可以装的上了，否则就没法装上的。</span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;"><br style="box-sizing: border-box;" />
</span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;"><strong>许可证也分几种类型</strong>：</span><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px; color: red;">develop版，adhoc版，appstore版本</span><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">。这里说一下adhoc，这个版本主要是用于内部测试的版本。比如APP上线前，需要N轮的QA测试。这个就是给他们测试的。测试没问题了，再打appstore版本，测试无误后提交苹果商店。<br /></span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;"><span style="box-sizing: border-box;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;"><strong><br />总结：</strong></span></span></div>
<div style="color: #454545; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 16px; box-sizing: border-box; margin: 0px;">
<p style="margin: 0px; box-sizing: border-box; padding: 0px;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: SimSun; font-size: 18px;">所以大家明白了，要想打出一个可用安装在iPhone上的一个测试版本，开发者必须要有：1，开发者证书+私钥；2，许可证文件。两证齐全方可打包成功。</span></p>
</div><img src ="http://www.cppblog.com/tx7do/aggbug/215312.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-10-27 12:56 <a href="http://www.cppblog.com/tx7do/archive/2017/10/27/215312.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何导出p12文件</title><link>http://www.cppblog.com/tx7do/archive/2017/10/27/215311.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Fri, 27 Oct 2017 04:55:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/10/27/215311.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215311.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/10/27/215311.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215311.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215311.html</trackback:ping><description><![CDATA[<strong> </strong><strong style="color: red;">转载自:http://www.jianshu.com/p/837d64356dac</strong><br /><br /><pre><div><div data-note-content=""><h3>1.为什么要导出.p12文件？</h3> <p>当我们用大于三个mac设备开发应用时，想要申请新的证书，如果在我们的证书里，包含了3个发布证书，2个开发证书，可以发现再也申请不了开发证书和发布证书了（一般在我们的证书界面中应该只有一个开发证书，一个发布证书，没必要生成那么多的证书，证书一般在过期之后才会重新添加。）<br />如图：</p> <div> <img src="http://upload-images.jianshu.io/upload_images/1305184-b30f16b14258ada7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/1305184-b30f16b14258ada7.png?imageMogr2/auto-orient/strip%7CimageView2/2" style="cursor: zoom-in;"  alt="" /><br /><div>081709403809634.png</div> </div> <p>这时候，再点击&#8220;+&#8221;时，就会发现点击不了开发和发布证书，也就是添加不了开发证书和发布证书了：</p> <div> <img src="http://upload-images.jianshu.io/upload_images/1305184-6d628df10252f4ee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/1305184-6d628df10252f4ee.png?imageMogr2/auto-orient/strip%7CimageView2/2" style="cursor: zoom-in;"  alt="" /><br /><div>2.png</div> </div> <h3>2.两个解决不能添加证书的办法：</h3> <h6>2.1第一种方法&#8212;&#8212;&#8220;revoke&#8221;（不推荐）：</h6> <p>将以前的证书&#8220;revoke&#8221;掉，如图：<br /></p><div> <img src="http://upload-images.jianshu.io/upload_images/1305184-1a7cdfe6d1b674a8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/1305184-1a7cdfe6d1b674a8.png?imageMogr2/auto-orient/strip%7CimageView2/2" style="cursor: zoom-in;"  alt="" /><br /><div>3.png</div> </div><p><br />然后重新生成一个新的证书。<br />这种方法是可以的，但是会造成相应的Provisioning Profiles失效，这是小问题。但是又要重新申请证书甚至描述文件很浪费时间，所以不提倡这种做法。</p> <h6>2.2第二种方法&#8212;&#8212;&#8220;.p12&#8221;（推荐）：</h6> <p>我们的每一个证书都可以生成一个.p12文件，这个文件是一个加密的文件，只要知道其密码，就可以供给所有的mac设备使用，使设备不需要在苹果开发者网站重新申请开发和发布证书，就能使用。<br />注意：一般.p12文件是给与别人使用的，本机必须已经有一个带秘钥的证书才可以生成.p12文件，如图：<br /></p><div> <img src="http://upload-images.jianshu.io/upload_images/1305184-c9284259f7f2386a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/1305184-c9284259f7f2386a.png?imageMogr2/auto-orient/strip%7CimageView2/2" style="cursor: zoom-in;"  alt="" /><br /><div>4.png</div> </div><p><br />打开钥匙串，选择我们需要的证书，右击，选择&#8220;导出&#8220;iPhone Distribition:```&#8221;：<br /></p><div> <img src="http://upload-images.jianshu.io/upload_images/1305184-8da21023b41510cf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/1305184-8da21023b41510cf.png?imageMogr2/auto-orient/strip%7CimageView2/2" style="cursor: zoom-in;"  alt="" /><br /><div>5.png</div> </div><p><br />为.p12文件填一个名字，点击存储：<br /></p><div> <img src="http://upload-images.jianshu.io/upload_images/1305184-39df177c709fe3b2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/1305184-39df177c709fe3b2.png?imageMogr2/auto-orient/strip%7CimageView2/2" style="cursor: zoom-in;"  alt="" /><br /><div>6.png</div> </div><p><br />填一个&#8220;密码&#8221;，&#8220;验证&#8221;和密码相同：<br /></p><div> <img src="http://upload-images.jianshu.io/upload_images/1305184-4d5f3905f33f0e4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/1305184-4d5f3905f33f0e4e.png?imageMogr2/auto-orient/strip%7CimageView2/2" style="cursor: zoom-in;"  alt="" /><br /><div>7.png</div> </div><p><br />点击好，在桌面上就形成了一个.p12文件了：<br /></p><div> <img src="http://upload-images.jianshu.io/upload_images/1305184-0460a15eed695056.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/1305184-0460a15eed695056.png?imageMogr2/auto-orient/strip%7CimageView2/2" style="cursor: zoom-in;"  alt="" /><br /><div>8.png</div> </div> <h4>注意事项：在别人的电脑上要成功安装，须具备两个文件：</h4> <p>1.该证书导出的&#8220;.p12&#8221;文件。<br />2.苹果开发者中的与&#8220;证书&#8221;对应的&#8220;描述文件&#8221;</p> <h6>如果需要用于开发的，那么需要这两个文件：</h6> <p>.p12文件本身就是一个加密的证书，所以用这两个文件就可以让其他mac设备使用了：</p> <div> <img src="http://upload-images.jianshu.io/upload_images/1305184-bac2dc4620e1c9aa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/1305184-bac2dc4620e1c9aa.png?imageMogr2/auto-orient/strip%7CimageView2/2" style="cursor: zoom-in;"  alt="" /><br /><div>9.png</div> </div>          </div>                   <div></div></div><br /><br />作者：wangjianjun0730<br />链接：http://www.jianshu.com/p/837d64356dac<br />來源：简书<br />著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。</pre><img src ="http://www.cppblog.com/tx7do/aggbug/215311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-10-27 12:55 <a href="http://www.cppblog.com/tx7do/archive/2017/10/27/215311.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Golang /Go调试工具delve</title><link>http://www.cppblog.com/tx7do/archive/2017/10/27/215310.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Fri, 27 Oct 2017 04:54:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/10/27/215310.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215310.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/10/27/215310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215310.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215310.html</trackback:ping><description><![CDATA[<strong> </strong><strong style="color: red;">转载自:http://www.jianshu.com/p/cc4621d9c0aa</strong><br /><br /><pre><div><div data-note-content=""><p>原文地址：<a href="https://github.com/derekparker/delve/tree/master/Documentation" target="_blank">https://github.com/derekparker/delve/tree/master/Documentation</a></p> <h1>安装</h1> <p>这里提供了支持的所有平台（操作系统）上安装Delve的说明。 请注意您必须安装Go 1.5或更高版本。 此外如果使用Go 1.5，您必须设置GO15VENDOREXPERIMENT = 1，然后再尝试安装。</p> <ul> <li>OSX<h5>在OSX上插入</h5> 请使用以下步骤在OSX上构建和安装Delve<h5>Via Homebrew</h5> 如果你安装了HomeBrew，只需运行：<blockquote><p>$ brew install go-delve/delve/delve</p></blockquote> </li> </ul> <h5>手动安装</h5> <p><strong>0) 必备条件</strong><br />确保您具有正确的编译工具链。<br />这应该是简单的：</p> <blockquote><p>xcode-select --install</p></blockquote> <p><strong>1）创建自签名证书</strong><br />你必须创建自签名证书，并使用它签署二进制文件：</p> <ol> <li>打开应用程序&#8220;钥匙串访问&#8221;（/ Applications / Utilities / Keychain Access.app）</li> <li>打开菜单 /Keychain Access/Certificate Assistant/Create a Certificate...</li> <li>选择一个名称（在示例中为dlv-cert），将&#8220;Identity Type(身份类型)&#8221;设置为&#8220;Self Signed Root(自签名根)&#8221;，将&#8220;Certificate Type(证书类型)&#8221;设置为&#8220;Code Signing(代码签名)&#8221;，然后选择&#8220;Let me override defaults（让我覆盖默认值）&#8221;。 单击&#8220;Continue(继续)&#8221;。 您可能想将预定义的365天期间延长到3650天。</li> <li>单击&#8220;Continue(继续)&#8221;多次，直到进入&#8220;Specify a Location For The Certificate(指定证书的位置)&#8221;页面，然后将&#8220;Keychain to System(钥匙串设置为系统)&#8221;。</li> <li>如果您不能将证书存储在&#8220;System（系统）&#8221;钥匙扣中，请在&#8220;login(登录)&#8221;钥匙扣中创建，然后将其导出。 然后，您可以将其导入到&#8220;System（系统）&#8221;钥匙扣。</li> <li>在钥匙串中选择&#8220;系统&#8221;，你应该找到你的新证书。 使用证书的上下文菜单（不是公钥或私钥），选择&#8220;获取信息&#8221;，打开&#8220;信任&#8221;项，并将&#8220;代码签名&#8221;设置为&#8220;始终信任&#8221;。</li> <li>[至少在Yosemite上：]在钥匙串中选择类别Keys  - &gt; dlv-cert - &gt;右键单击 - &gt; GetInfo - &gt;Access Control （访问控制） - &gt;选择&#8220;允许所有应用程序访问此项目&#8221; - &gt;保存更改。</li> <li>您必须退出&#8220;钥匙串访问&#8221;应用程序，才能使用证书并通过终止当前运行的&#8220;任务门&#8221;进程重新启动&#8220;任务门&#8221;服务。 或者，您可以重新启动计算机。<br /><strong>2）二进制安装</strong><ol> <li>在写go程序的时候首先创建文件夹$GOPATH/src/github.com/derekparker 并且cd 到c$GOPATH/src/github.com/derekparker目录下</li> <li>clone 这个项目：git clone <a href="https://github.com/derekparker/delve.git" target="_blank">https://github.com/derekparker/delve.git</a> 并且cd delve</li> </ol> </li> </ol> <p>注意：如果您使用Go 1.5必须先设置GO15VENDOREXPERIMENT = 1，然后才能继续安装。<br />GO15VENDOREXPERIMENT env var只是选择进入<a href="https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo/edit" target="_blank">Go 1.5 Vendor Experiment</a>。（1.6不需要）</p> <p>所有make命令都假设一个CERT环境变量，其中包含上面创建的证书的名称。 Makefile还假定GOPATH是单值的，不是冒号分隔的。 makefile只需要帮助促进构建和代码签名的过程。</p> <ul> <li>运行以下命令：CERT = dlv-cert make install，它将安装二进制文件并对其进行编码。<br />有关更多信息，请参阅此安装视频<a href="https://www.youtube.com/watch?v=4ndjybtBg74" target="_blank">https://www.youtube.com/watch?v=4ndjybtBg74</a><h5>说明</h5> 在构建期间取消代码签名授权提示<br />如果在使用自签名证书运行make时提示您授权，请尝试以下操作：<ul> <li>打开应用程序&#8220;钥匙串访问&#8221;（/ Applications / Utilities / Keychain Access.app）</li> <li>双击与您的自签名证书（示例中的dlv-cert）对应的私钥</li> <li>选择&#8220;Access Control(访问控制)&#8221;选项卡</li> <li>单击&#8220;始终允许这些应用程序访问&#8221;下的[+]，然后从Finder对话框中选择/ usr / bin / codesign</li> <li>点击&#8220;(Save changes)保存更改&#8221;按钮</li> <li>消除&#8220;Developer tools access(开发工具访问)&#8221;提示运行delve</li> </ul> </li> </ul> <p>如果运行dlv时出现此提示：</p> <blockquote><p>"Developer tools access needs to take control of another process for debugging to continue. Type your password to allow this"</p></blockquote> <p>尝试运行DevToolsSecurity -enable以消除提示。 有关更多信息，请参阅man DevToolsSecurity。</p> <ul> <li>Linux<br />请使用以下步骤在Linux上构建和安装Delve<br />在Linux上有两种安装方式。 首先是标准的go get方法：<blockquote><p>go get github.com/derekparker/delve/cmd/dlv</p></blockquote> </li> </ul> <p>或者，您可以克隆repo并运行：</p> <blockquote><p>$ make install</p></blockquote> <p>注意：如果您使用Go 1.5必须先设置GO15VENDOREXPERIMENT = 1，然后才能继续安装。 GO15VENDOREXPERIMENT env var只是选择进入<a href="https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo/edit" target="_blank">Go 1.5 Vendor Experiment</a>。</p> <ul> <li>Windows<br />请使用标准的go get命令在Windows上构建和安装Delve<blockquote><p>go get github.com/derekparker/delve/cmd/dlv</p></blockquote> </li> </ul> <p>注意：如果您使用Go 1.5必须先设置GO15VENDOREXPERIMENT = 1，然后才能继续安装。 GO15VENDOREXPERIMENT env var只是选择进入<a href="https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo/edit" target="_blank">Go 1.5 Vendor Experiment</a>。</p> <h1>用法</h1> <p>您可以多种方式调用Delve，具体取决于您的使用需求。 Delve使每个尝试都是用户友好的，确保用户必须做最少的工作可能开始调试他们的程序。</p> <p>请参阅主要使用文档以进一步探索命令。</p> <h1>命令行界面</h1> <p>命令</p> <table> <thead> <tr> <th>命令</th> <th>描述 </th> </tr> </thead> <tbody> <tr> <td>args</td> <td>打印函数参数</td> </tr> <tr> <td>break</td> <td>设置一个断点</td> </tr> <tr> <td>breakpoints</td> <td>打印激活的断点信息</td> </tr> <tr> <td>clear</td> <td>删除断点</td> </tr> <tr> <td>clearall</td> <td>删除所有的断点</td> </tr> <tr> <td>condition</td> <td>设置断点条件</td> </tr> <tr> <td>continue</td> <td>运行到断点或程序终止</td> </tr> <tr> <td>disassemble</td> <td>拆解器</td> </tr> <tr> <td>exit</td> <td>退出debugger</td> </tr> <tr> <td>frame</td> <td>在不同的框架上执行的命令</td> </tr> <tr> <td>funcs</td> <td>打印函数列表</td> </tr> <tr> <td>goroutine</td> <td>显示或更改当前goroutine</td> </tr> <tr> <td>goroutines</td> <td>列出程序的全部goroutines</td> </tr> <tr> <td>help</td> <td>打印出帮助信息</td> </tr> <tr> <td>list</td> <td>显示源代码</td> </tr> <tr> <td>locals</td> <td>打印局部变量</td> </tr> <tr> <td>next</td> <td>跳到下一行</td> </tr> <tr> <td>on</td> <td>在遇到断点时执行一个命令</td> </tr> <tr> <td>print</td> <td>评估表达式</td> </tr> <tr> <td>regs</td> <td>打印CPU寄存器的内容</td> </tr> <tr> <td>restart</td> <td>重启进程</td> </tr> <tr> <td>set</td> <td>更改变量的值</td> </tr> <tr> <td>source</td> <td>执行包含delve命令列表的文件</td> </tr> <tr> <td>sources</td> <td>打印源文件列表</td> </tr> <tr> <td>stack</td> <td>打印堆栈跟踪</td> </tr> <tr> <td>step</td> <td>单步执行程序</td> </tr> <tr> <td>step-instruction</td> <td>单步单个执行cpu指令</td> </tr> <tr> <td>thread</td> <td>切换到指定的线程</td> </tr> <tr> <td>threads</td> <td>打印每一个跟踪线程的信息</td> </tr> <tr> <td>trace</td> <td>设置跟踪点</td> </tr> <tr> <td>types</td> <td>打印类型列表</td> </tr> <tr> <td>vars</td> <td>打印某个包内的(全局)变量</td> </tr> </tbody> </table> <h1>API</h1> <h4>API文档</h4> <p>Delve公开了主要可以与Delve编程交互的IDEs和编辑器的一个API接口,以便这些程序使用。 API由终端使用，因此无论新功能如何，都将始终保持最新的锁定状态。</p> <h4>使用</h4> <p>为了在&#8220;API模式&#8221;中运行Delve，只需使用标准命令之一调用，提供--headless标志，如下所示：</p> <blockquote><p>$ dlv debug --headless --api-version=2 --log --listen=127.0.0.1:8181</p></blockquote> <p>这将以非交互模式启动调试器，侦听指定的地址，并启用日志记录。 当然最后两个标志(log listen)是可选的。<br />或者如果您要将多个客户端连接到API，也可以指定--accept-multi客户端标志。<br />您可以使用connect子命令从Delve本身连接headless调试器：</p> <blockquote><p>$ dlv connect 127.0.0.1:8181</p></blockquote> <p>这对于远程调试很有用。</p> <h4>API 接口</h4> <p>Delve已经可以允许多个客户端/服务器这种方式的架构。因为所有的&#8220;业务逻辑&#8221;被抽象出实际的客户端/服务器实现，所有允许容易实现新的API接口。</p> <h4>当前API接口</h4> <p><a href="https://github.com/derekparker/delve/blob/master/Documentation/api/json-rpc/README.md" target="_blank">JSON-RPC</a></p> <h1>内部文件</h1> <p>TODO（derek parker）</p> <blockquote><p>将要做的</p></blockquote> <p>这个目录将包含调试器内部和它如何工作的文档。</p> <h1>编辑器集成</h1> <p>可以使用以下用于delve编辑器的插件：<br /><strong>1. Golang Plugin for IntelliJ IDEA</strong> （<a href="https://github.com/go-lang-plugin-org/go-lang-idea-plugin%EF%BC%89" target="_blank">https://github.com/go-lang-plugin-org/go-lang-idea-plugin）</a><br /><strong>2. Go for Visual Studio Code</strong>  (<a href="https://github.com/Microsoft/vscode-go#go-for-visual-studio-code" target="_blank">https://github.com/Microsoft/vscode-go#go-for-visual-studio-code</a>)<br /><strong>3. Emacs plugin</strong> <a href="https://github.com/benma/go-dlv.el/" target="_blank">https://github.com/benma/go-dlv.el/</a><br /><strong>4. LiteIDE</strong> <a href="https://github.com/visualfc/liteide" target="_blank">https://github.com/visualfc/liteide</a><br /><strong>5. Go Debugger for Atom</strong><br /><strong><a href="https://atom.io/packages/go-debug" target="_blank">go-debug</a></strong><br />atom 使用delve 来调试代码</p> <div> <img src="http://upload-images.jianshu.io/upload_images/1162076-57f2da96d9e0b55a.gif?imageMogr2/auto-orient/strip" data-original-src="http://upload-images.jianshu.io/upload_images/1162076-57f2da96d9e0b55a.gif?imageMogr2/auto-orient/strip" style="cursor: zoom-in;"  alt="" /><br /><div>demo.gif</div> </div><p><br /><strong>安装</strong><br />可以使用apm install go-debug或在设置中搜索go-debug。<br /><strong>安装delve</strong><br />查阅<a href="https://github.com/derekparker/delve/tree/master/Documentation/installation" target="_blank">https://github.com/derekparker/delve/tree/master/Documentation/installation</a><br /><strong>绑定的快捷键</strong></p> <blockquote><p>f5   运行当前包 (dlv debug)<br /> ctrl-f5 测试运行当前包(dlv test)<br />  shift-f5 重新启动当前的delve会话(r / restart)<br />  f6 停止delve (exit / quit / q)<br />  f8 继续执行 (c / continue)<br /> f9 切换断点<br />  f10 到下一个断电源(n / next)<br />  f11 进入函数 (s / step)<br />cmd-k cmd-g (mac) / ctrl-k ctrl-g (others) 切换主面板</p></blockquote> <p><strong>链接</strong><br />关于slack的golang社区：<a href="https://gophersinvite.herokuapp.com/" target="_blank">Gopher Slack| go-plus</a><br />问题？请直接在go-plus频道给我发送消息</p> <h1>已知bugs</h1> <ul> <li>当一个函数定义两个（或多个）同名的变量时，delve无法区分它们：locals将打印这两个变量，print将随机选择一个。 参见问题<a href="https://github.com/derekparker/delve/issues/106" target="_blank">Issue＃106</a>。</li> <li>Delve目前不支持32位系统。 这通常表现为proc / disasm.go中的编译器错误。 参见问题<a href="https://github.com/derekparker/delve/issues/20" target="_blank">Issue＃20</a>。</li> <li>当Delve使用go之前的版本1.7.0编译时，不能使用Receiver.Method Name语法在远程包中的函数上设置断点。 参见问题<a href="https://github.com/derekparker/delve/issues/528" target="_blank">Issue＃528</a>。</li> </ul>          </div>                   <div></div></div><br /><br />作者：hehe_Android<br />链接：http://www.jianshu.com/p/cc4621d9c0aa<br />來源：简书<br />著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。</pre><img src ="http://www.cppblog.com/tx7do/aggbug/215310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-10-27 12:54 <a href="http://www.cppblog.com/tx7do/archive/2017/10/27/215310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows下visual studio code搭建golang开发环境</title><link>http://www.cppblog.com/tx7do/archive/2017/10/26/215309.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 26 Oct 2017 05:56:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/10/26/215309.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215309.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/10/26/215309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215309.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215309.html</trackback:ping><description><![CDATA[<strong> </strong><strong style="color: red;">转载自:http://www.cnblogs.com/JerryNo1/p/5412864.html</strong><br />
<br />
<div id="cnblogs_post_body" style="margin: 0px 0px 20px; word-break: break-word; font-family: Verdana, Arial, Helvetica, sans-serif; ">
<h1>前言</h1>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">其实环境搭建没什么难的，但是遇到一些问题，主要是有些网站资源访问不了(如：golang.org)，<br style="margin: 0px; padding: 0px;" />
导致一些包无法安装，最终会导致环境搭建失败，跟据这个教程几步，我们将可以快速的构建golang的开发环境。</p>
<h3>开发环境：</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><img src="http://images.cnblogs.com/cnblogs_com/JerryNo1/818380/o_QQ%e6%88%aa%e5%9b%be20160420134611.jpg" alt="image" style="margin: 0px; padding: 0px; border: 0px; max-width: 900px;" /></p>
<h1>一、安装</h1>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">这里我用需要安装一些工具：</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">1.<a href="https://www.visualstudio.com/products/code-vs" style="margin: 0px; padding: 0px; color: black;">Visual Studio Code 1.0.0</a></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">2.<a href="http://www.golangtc.com/download" style="margin: 0px; padding: 0px; color: black;">Golang下载</a></p>
<pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; word-wrap: break-word;"><code css"="" style="margin: auto; vertical-align: middle; display: block;  height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">这里我使用的是<span style="margin: 0px; padding: 0px; color: #0000ff;">Go1</span><span style="margin: 0px; padding: 0px;">.6</span>.</code></pre>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">3.<a href="https://git-scm.com/download/" style="margin: 0px; padding: 0px; color: black;">git下载</a></p>
<pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; word-wrap: break-word;"><code prolog"="" style="margin: auto; vertical-align: middle; display: block;  height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">这一步跟建环境没什么关系， 但是之后要引用一些包需要它.</code></pre>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">4.<a href="https://marketplace.visualstudio.com/items?itemName=lukehoban.Go" style="margin: 0px; padding: 0px; color: black;">安装vscode-go 插件</a></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><img src="http://images.cnblogs.com/cnblogs_com/JerryNo1/818380/o_QQ%e6%88%aa%e5%9b%be20160420141250.jpg" alt="image" style="margin: 0px; padding: 0px; border: 0px; max-width: 900px;" /></p>
<pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; word-wrap: break-word;"><code go"="" style="margin: auto; vertical-align: middle; display: block;  height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">安装方法:打开vscode 按F1 然后选择安装扩展 选择<span style="margin: 0px; padding: 0px; color: #0000ff;">go</span> 下载后 重启</code></pre>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><img src="http://images.cnblogs.com/cnblogs_com/JerryNo1/818380/o_QQ%e6%88%aa%e5%9b%be20160420141705.jpg" alt="image" style="margin: 0px; padding: 0px; border: 0px; max-width: 900px;" /></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">5.<a href="http://pan.baidu.com/s/1qY7pRa8" style="margin: 0px; padding: 0px; color: black;">下载vscode扩展依赖工具</a></p>
<pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; word-wrap: break-word;"><code go"="" style="margin: auto; vertical-align: middle; display: block;  height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">vscode-<span style="margin: 0px; padding: 0px; color: #0000ff;">go</span> 插件需要一些工具，这些功具默认需要这样安装： <br /><span style="margin: 0px; padding: 0px; color: #0000ff;">go</span> get -u -v github.com/nsf/gocode <br /><span style="margin: 0px; padding: 0px; color: #0000ff;">go</span> get -u -v github.com/rogpeppe/godef <br /><span style="margin: 0px; padding: 0px; color: #0000ff;">go</span> get -u -v github.com/golang/lint/golint <br /><span style="margin: 0px; padding: 0px; color: #0000ff;">go</span> get -u -v github.com/lukehoban/<span style="margin: 0px; padding: 0px; color: #0000ff;">go</span>-outline <br /><span style="margin: 0px; padding: 0px; color: #0000ff;">go</span> get -u -v sourcegraph.com/sqs/goreturns <br /><span style="margin: 0px; padding: 0px; color: #0000ff;">go</span> get -u -v golang.org/x/tools/cmd/gorename <br /><span style="margin: 0px; padding: 0px; color: #0000ff;">go</span> get -u -v github.com/tpng/gopkgs <br /><span style="margin: 0px; padding: 0px; color: #0000ff;">go</span> get -u -v github.com/newhook/<span style="margin: 0px; padding: 0px; color: #0000ff;">go</span>-symbols <br /><span style="margin: 0px; padding: 0px; color: #0000ff;">go</span> get -u -v golang.org/x/tools/cmd/guru<br /> (以及dlv调试运行工具)<br /><br />这些内容最终目的是要在gopath中bin文件夹中生成一些exe文件。<br />但是，这里安装时遇到了一些问题，有一些会安装失败，报错信息主要意思是说无法链接啊，无法找到啊之类的。 <br />这里我省略这些步骤。直接下载我已经生成的exe包，放在gopath的bin文件夹中就行了。如下图：</code></pre>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><img src="http://images.cnblogs.com/cnblogs_com/JerryNo1/818380/o_QQ%e6%88%aa%e5%9b%be20160420142649.jpg" alt="image" style="margin: 0px; padding: 0px; border: 0px; max-width: 900px;" /></p>
<h1>二、配置</h1>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">1.GOPATH：这个是你的工作目录，请在系统新加一个GOPATH指定你的工作目录,并且在工作目录中新建<br style="margin: 0px; padding: 0px;" />
bin,pkg,src三个文件夹。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">2.Git：将git安装目录下的bin目录加入Path环境变量。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">3.用vscode打开src文件夹添加两个文件如下：<br style="margin: 0px; padding: 0px;" />
<img src="http://images.cnblogs.com/cnblogs_com/JerryNo1/818380/o_QQ%e6%88%aa%e5%9b%be20160420143835.jpg" alt="image" style="margin: 0px; padding: 0px; border: 0px; max-width: 900px;" /></p><h1><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-weight: normal;">{<br />&nbsp;&nbsp;&nbsp;&nbsp;"files.autoSave":&nbsp;"onFocusChange",<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.buildOnSave":&nbsp;<span style="color: #0000FF; ">true</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.lintOnSave":&nbsp;<span style="color: #0000FF; ">true</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.vetOnSave":&nbsp;<span style="color: #0000FF; ">true</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.buildTags":&nbsp;"",<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.buildFlags":&nbsp;[],<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.lintFlags":&nbsp;[],<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.vetFlags":&nbsp;[],<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.coverOnSave":&nbsp;<span style="color: #0000FF; ">false</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.useCodeSnippetsOnFunctionSuggest":&nbsp;<span style="color: #0000FF; ">false</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.formatOnSave":&nbsp;<span style="color: #0000FF; ">true</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.formatTool":&nbsp;"goreturns",<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.goroot":&nbsp;"C:\\Go",<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.gopath":&nbsp;"H:\\Projects\\GitHub\\Go",<br />&nbsp;&nbsp;&nbsp;&nbsp;"go.gocodeAutoBuild":&nbsp;<span style="color: #0000FF; ">true</span><br />}</span></div><img src="http://images.cnblogs.com/cnblogs_com/JerryNo1/818380/o_QQ%e6%88%aa%e5%9b%be20160420144012.jpg" alt="image" style="font-weight: 400; white-space: pre-wrap; font-size: 14px; margin: 0px; padding: 0px; border: 0px; max-width: 900px;" /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-weight: normal;">{<br />&nbsp;&nbsp;&nbsp;&nbsp;"version":&nbsp;"0.2.0",<br />&nbsp;&nbsp;&nbsp;&nbsp;"configurations":&nbsp;[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"name":&nbsp;"Launch",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"type":&nbsp;"go",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"request":&nbsp;"launch",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"mode":&nbsp;"debug",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"remotePath":&nbsp;"",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"port":&nbsp;2345,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"host":&nbsp;"127.0.0.1",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"program":&nbsp;"${workspaceRoot}\\helloworld",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"env":&nbsp;{},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"args":&nbsp;[]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br />}</span></div><br /><br />三、演示</h1>
<h2>运行</h2>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><img src="http://images.cnblogs.com/cnblogs_com/JerryNo1/818380/o_QQ%e6%88%aa%e5%9b%be20160420151454.jpg" alt="image" style="margin: 0px; padding: 0px; border: 0px; max-width: 900px;" /></p>
<h2><br />调试</h2>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><img src="http://images.cnblogs.com/cnblogs_com/JerryNo1/818380/o_QQ%e6%88%aa%e5%9b%be20160420151303.jpg" alt="image" style="margin: 0px; padding: 0px; border: 0px; max-width: 900px;" /></p>
<h1><br />四、总结</h1>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">这些库因为不能获取，我在github上找了好久，最后编译成exe,国内找不到几篇文章提到这个问题，<br style="margin: 0px; padding: 0px;" />
所以写个博客，让大家方便的开发。希望大家快乐的学习go语言。</p>
</div>
<div style="margin: 0px; clear: both; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; "></div>
<div id="blog_post_info_block" style="margin: 20px 0px 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; "></div><img src ="http://www.cppblog.com/tx7do/aggbug/215309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-10-26 13:56 <a href="http://www.cppblog.com/tx7do/archive/2017/10/26/215309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sublime Text 3 注册码</title><link>http://www.cppblog.com/tx7do/archive/2017/10/18/215304.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 18 Oct 2017 06:58:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/10/18/215304.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215304.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/10/18/215304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215304.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215304.html</trackback:ping><description><![CDATA[<div style="display: inline-block;"><strong> Sublime text 3 (Build 3143) </strong></div>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->&#8212;&#8211;&nbsp;BEGIN&nbsp;LICENSE&nbsp;&#8212;&#8211;<br />
TwitterInc<br />
200&nbsp;User&nbsp;License<br />
EA7E-890007<br />
1D77F72E&nbsp;390CDD93&nbsp;4DCBA022&nbsp;FAF60790<br />
61AA12C0&nbsp;A37081C5&nbsp;D0316412&nbsp;4584D136<br />
94D7F7D4&nbsp;95BC8C1C&nbsp;527DA828&nbsp;560BB037<br />
D1EDDD8C&nbsp;AE7B379F&nbsp;50C9D69D&nbsp;B35179EF<br />
2FE898C4&nbsp;8E4277A8&nbsp;555CE714&nbsp;E1FB0E43<br />
D5D52613&nbsp;C3D12E98&nbsp;BC49967F&nbsp;7652EED2<br />
9D2D2E61&nbsp;67610860&nbsp;6D338B72&nbsp;5CF95C69<br />
E36B85CC&nbsp;84991F19&nbsp;7575D828&nbsp;470A92AB<br />
&#8212;&#8212;&nbsp;END&nbsp;LICENSE&nbsp;&#8212;&#8212;</div><img src ="http://www.cppblog.com/tx7do/aggbug/215304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-10-18 14:58 <a href="http://www.cppblog.com/tx7do/archive/2017/10/18/215304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mac下查看静态库的架构</title><link>http://www.cppblog.com/tx7do/archive/2017/09/26/215266.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 25 Sep 2017 16:58:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/09/26/215266.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215266.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/09/26/215266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215266.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215266.html</trackback:ping><description><![CDATA[<span style="font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #ffffff;">otool -hv xxxx.a<br /><br /></span><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #ffffff;">file xxx.a<br /><br /></span><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #ffffff;">lipo -info xxx.a</span><img src ="http://www.cppblog.com/tx7do/aggbug/215266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-09-26 00:58 <a href="http://www.cppblog.com/tx7do/archive/2017/09/26/215266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql获取当天,昨天,本周,本月,上周,上月的起始时间</title><link>http://www.cppblog.com/tx7do/archive/2017/07/19/215119.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 19 Jul 2017 07:34:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/07/19/215119.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215119.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/07/19/215119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215119.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215119.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;今天</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(NOW(),<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d&nbsp;00:00:00</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">今天开始</span><span style="color: #FF0000; ">'</span>;<br /><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(NOW(),<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d&nbsp;23:59:59</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">今天结束</span><span style="color: #FF0000; ">'</span>;<br /><br /><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;昨天</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(&nbsp;DATE_SUB(CURDATE(),&nbsp;INTERVAL&nbsp;<span style="color: #800000; font-weight: bold; ">1</span>&nbsp;<span style="color: #FF00FF; ">DAY</span>),&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d&nbsp;00:00:00</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">昨天开始</span><span style="color: #FF0000; ">'</span>;<br /><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(&nbsp;DATE_SUB(CURDATE(),&nbsp;INTERVAL&nbsp;<span style="color: #800000; font-weight: bold; ">1</span>&nbsp;<span style="color: #FF00FF; ">DAY</span>),&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d&nbsp;23:59:59</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">昨天结束</span><span style="color: #FF0000; ">'</span>;<br /><br /><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;上周</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(&nbsp;DATE_SUB(&nbsp;DATE_SUB(CURDATE(),&nbsp;INTERVAL&nbsp;WEEKDAY(CURDATE())&nbsp;<span style="color: #FF00FF; ">DAY</span>),&nbsp;INTERVAL&nbsp;<span style="color: #800000; font-weight: bold; ">1</span>&nbsp;WEEK),&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d&nbsp;00:00:00</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">上周一</span><span style="color: #FF0000; ">'</span>;<br /><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(&nbsp;SUBDATE(CURDATE(),&nbsp;WEEKDAY(CURDATE())&nbsp;<span style="color: #808080; ">+</span>&nbsp;<span style="color: #800000; font-weight: bold; ">1</span>),&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d&nbsp;23:59:59</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">上周末</span><span style="color: #FF0000; ">'</span>;<br /><br /><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;本周</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(&nbsp;SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%w</span><span style="color: #FF0000; ">'</span>)<span style="color: #808080; ">-</span><span style="color: #800000; font-weight: bold; ">1</span>),&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d&nbsp;00:00:00</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">本周一</span><span style="color: #FF0000; ">'</span>;<br /><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(&nbsp;SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%w</span><span style="color: #FF0000; ">'</span>)<span style="color: #808080; ">-</span><span style="color: #800000; font-weight: bold; ">7</span>),&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d&nbsp;23:59:59</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">本周末</span><span style="color: #FF0000; ">'</span>;<br /><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;上面的本周算法会有问题,因为mysql是按照周日为一周第一天,如果当前是周日的话,会把时间定为到下一周.</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(&nbsp;DATE_SUB(CURDATE(),&nbsp;INTERVAL&nbsp;WEEKDAY(CURDATE())&nbsp;<span style="color: #FF00FF; ">DAY</span>),&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d&nbsp;00:00:00</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">本周一</span><span style="color: #FF0000; ">'</span>;<br /><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(&nbsp;DATE_ADD(SUBDATE(CURDATE(),&nbsp;WEEKDAY(CURDATE())),&nbsp;INTERVAL&nbsp;<span style="color: #800000; font-weight: bold; ">6</span>&nbsp;<span style="color: #FF00FF; ">DAY</span>),&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d&nbsp;23:59:59</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">本周末</span><span style="color: #FF0000; ">'</span>;<br /><br /><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;上月</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(&nbsp;DATE_SUB(CURDATE(),&nbsp;INTERVAL&nbsp;<span style="color: #800000; font-weight: bold; ">1</span>&nbsp;<span style="color: #FF00FF; ">MONTH</span>),&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-01&nbsp;00:00:00</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">上月初</span><span style="color: #FF0000; ">'</span>;<br /><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(&nbsp;LAST_DAY(DATE_SUB(CURDATE(),&nbsp;INTERVAL&nbsp;<span style="color: #800000; font-weight: bold; ">1</span>&nbsp;<span style="color: #FF00FF; ">MONTH</span>)),&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d&nbsp;23:59:59</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">上月末</span><span style="color: #FF0000; ">'</span>;<br /><br /><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;本月</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(&nbsp;CURDATE(),&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-01&nbsp;00:00:00</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">本月初</span><span style="color: #FF0000; ">'</span>;<br /><span style="color: #0000FF; ">SELECT</span>&nbsp;DATE_FORMAT(&nbsp;LAST_DAY(CURDATE()),&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">%Y-%m-%d&nbsp;23:59:59</span><span style="color: #FF0000; ">'</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">本月末</span><span style="color: #FF0000; ">'</span>;</div><img src ="http://www.cppblog.com/tx7do/aggbug/215119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-07-19 15:34 <a href="http://www.cppblog.com/tx7do/archive/2017/07/19/215119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mac禁用ipv6</title><link>http://www.cppblog.com/tx7do/archive/2017/06/19/215006.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 19 Jun 2017 01:17:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/06/19/215006.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/215006.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/06/19/215006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/215006.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/215006.html</trackback:ping><description><![CDATA[<strong style="color: red;">转载自：http://www.jianshu.com/p/bb820560b9d6</strong><br />
<br />
<div style="box-sizing: border-box; color: #2f2f2f; word-break: break-word; font-size: 16px; line-height: 1.7; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif;">
<p style="box-sizing: border-box; margin: 0px 0px 25px; word-break: break-word;">打开系统终端，输入下列命令：</p>
<p style="box-sizing: border-box; margin: 0px 0px 25px; word-break: break-word;">networksetup -listallnetworkservices | sed 1d | xargs -I {} networksetup -setv6off {}<br style="box-sizing: border-box;" />
</p>
<p style="box-sizing: border-box; margin: 0px 0px 25px; word-break: break-word;">命令会把所有接口的ipv6给关闭，并且会弹出多次输入密码的窗口。</p>
<div></div>
</div>
<img src ="http://www.cppblog.com/tx7do/aggbug/215006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-06-19 09:17 <a href="http://www.cppblog.com/tx7do/archive/2017/06/19/215006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TOML： GitHub 这是要革 YAML 的命呀！</title><link>http://www.cppblog.com/tx7do/archive/2017/04/15/214854.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sat, 15 Apr 2017 02:05:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/04/15/214854.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/214854.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/04/15/214854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/214854.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/214854.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转载自：https://segmentfault.com/a/1190000000477752GitHub 目前的新项目已经转用　CoffeeScript&nbsp;了。CoffeeScript 比　JavaScript　要简洁优雅得多。同样地，GitHub　也觉得 YAML 不够简洁优雅，因此捣鼓出了一个TOML。TOML　的全称是　Tom's Obvious, Minimal ...&nbsp;&nbsp;<a href='http://www.cppblog.com/tx7do/archive/2017/04/15/214854.html'>阅读全文</a><img src ="http://www.cppblog.com/tx7do/aggbug/214854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-04-15 10:05 <a href="http://www.cppblog.com/tx7do/archive/2017/04/15/214854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何使用TestFlight进行App构建版本测试</title><link>http://www.cppblog.com/tx7do/archive/2017/03/02/214721.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 02 Mar 2017 07:58:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/03/02/214721.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/214721.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/03/02/214721.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/214721.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/214721.html</trackback:ping><description><![CDATA[<strong style="color: red;">转载自：http://www.jianshu.com/p/27545c2d4d8b</strong><br />
<br />
<div style="box-sizing: border-box; color: #2f2f2f; word-break: break-word; font-size: 16px; line-height: 1.7; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; ">
<p style="box-sizing: border-box; margin: 0px 0px 25px; word-break: break-word;">在日常的开发当中，当一个项目在开发过程中或者完成准备上线，都需要我们进行真机测试，否则不可能开发完了就直接扔到了App，等上线了再下载看看，这都是不可能的。那么说到真机测试，大家肯定会想到弄一个99美刀的开发者账号，然后在开发者账号中把自己的设备注册成测试机，下载一个证书，一个描述文件，安装，运行，搞定。我平时也是这么搞得，但是对于高度强迫症的我来说，在项目发布前还是不放心使用测试机进行测试，万一把测试环境的版本传上去怎么办，所以这个时候我习惯性的就会使用TestFlight进行测试一下，不求别的，只求心安，那么为什么使用TestFlight进行测试就会心安，就不怕发错版本呢？ 它究竟是个什么鬼？<br style="box-sizing: border-box;" />
首先它的出现是在iOS8的时候，在Xcode 6和iOS 8上公开发行，它被整合到了iTunes Connect，你可以通过电子邮件的形式来邀请你的Beta测试成员。<br style="box-sizing: border-box;" />
TestFlight的测试方式分为两种，一种是内部测试，一种是外部测试。从功能上讲，这两种方式都可以为测试人员在测试阶段对你的App进行测试。但是既然分了内部测试和外部测试，他们肯定还是有区别的，所谓的内部主要是指iTunes Connect上在你的开发团队里参与技术开发或者管理的成员（管理员，技术，法务人员）。最多可以邀请25个内部成员，而与之相对的外部测试，指的是那些不属于你的团队或者公司的测试者，外部测试人员的上限是2000人。这里有一点需要注意的是，在你邀请外部成员参与测试之前，需要先通过苹果的审核，一般审核会在一天左右。而这一限制在内部成员上就没有，也就是说只要你把你的App上传到iTunes Connect上之后内部成员就可以开始进行内部测试了，无需审核。</p>
<div style="box-sizing: border-box; padding-bottom: 25px; width: 700px; ">
<div style="text-align: center;"><img src="http://upload-images.jianshu.io/upload_images/941675-847a9204a189072b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/941675-847a9204a189072b.png?imageMogr2/auto-orient/strip%7CimageView2/2" alt="" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; cursor: zoom-in; transition: all 0.25s ease-in-out;" /></div>
<div style="box-sizing: border-box; min-width: 20%; max-width: 80%; min-height: 22px; display: inline-block; padding: 10px; margin: 0px auto; border-bottom: 1px solid #d9d9d9; font-size: 14px; color: #969696; line-height: 1.7;">
<div style="text-align: center;">TestFlight 内部测试 外部测试</div>
</div>
</div>
<p style="box-sizing: border-box; margin: 0px 0px 25px; word-break: break-word;">下面我们来说一下怎么使用这个东西，这个过程咱们给概括一下基本分为三步：<br style="box-sizing: border-box;" />
一：上传程序到iTunes Connect<br style="box-sizing: border-box;" />
上传程序到iTunes Connect，这个就不用多说了，大家都知道怎么上传，这里简单说一下，首先在iTunes Connect创建一个自己应用，已经有的就不必创建了，然后在Xcode上配置好相应的证书，对应用程序进行打包，最后通过 archive打包 或者 用Application Loader 上传，就可以了</p>
<p style="box-sizing: border-box; margin: 0px 0px 25px; word-break: break-word;">二：发送 TestFlight 测试邀请<br style="box-sizing: border-box;" />
登录开发者网站，<a href="https://developer.apple.com/cn/" target="_blank" style="box-sizing: border-box; background-color: transparent; color: #3194d0; text-decoration: none; cursor: pointer;">https://developer.apple.com</a>&nbsp;，来到iTunes Connect，找到你刚才上传的app，找到TestFlight，然后选择内部测试，或者是外部测试，然后你还要进行选择测试版本，就是你要对哪个版本的app进行测试，选完了版本之后，要添加需要进行测试的人员，选择好人员之后最后一步，开始测试，这个时候被选择人员的邮箱就会收到一个TestFlight的测试邀请邮件，如下图：<br style="box-sizing: border-box;" />
</p>
<div style="box-sizing: border-box; padding-bottom: 25px; width: 700px; "><img src="http://upload-images.jianshu.io/upload_images/941675-1322c231159dc480.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/941675-1322c231159dc480.png?imageMogr2/auto-orient/strip%7CimageView2/2" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; cursor: zoom-in; transition: all 0.25s ease-in-out;" alt="" /><br style="box-sizing: border-box;" />
<div style="box-sizing: border-box; min-width: 20%; max-width: 80%; min-height: 22px; display: inline-block; padding: 10px; margin: 0px auto; border-bottom: 1px solid #d9d9d9; font-size: 14px; color: #969696; line-height: 1.7;">TestFlight 页面</div>
</div>
<p style="box-sizing: border-box; margin: 0px 0px 25px; word-break: break-word;">三：如果你没安装TestFlight这个app，先到AppStore上搜索 TestFlight，然后下载下来，使用你的Apple ID登录，然后在手机打开你的邮箱，找到刚才收到的邮件，要是没找到，建议到垃圾邮件看一眼，然后点击 Start Testing 按钮，这个时候会直接跳转到你的TestFlight上，最后点击INSTALL进行下载。如图：</p>
<div style="box-sizing: border-box; padding-bottom: 25px; width: 700px; "><img src="http://upload-images.jianshu.io/upload_images/941675-7c9df7f13d52bb67.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/941675-7c9df7f13d52bb67.PNG?imageMogr2/auto-orient/strip%7CimageView2/2" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; cursor: zoom-in; transition: all 0.25s ease-in-out;" alt="" /><br style="box-sizing: border-box;" />
<div style="box-sizing: border-box; min-width: 20%; max-width: 80%; min-height: 22px; display: inline-block; padding: 10px; margin: 0px auto; border-bottom: 1px solid #d9d9d9; font-size: 14px; color: #969696; line-height: 1.7;">TestFlight App</div>
</div>
<div style="box-sizing: border-box; padding-bottom: 25px; width: 700px; "><img src="http://upload-images.jianshu.io/upload_images/941675-0c7a25a1dadf773a.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/941675-0c7a25a1dadf773a.PNG?imageMogr2/auto-orient/strip%7CimageView2/2" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; cursor: zoom-in; transition: all 0.25s ease-in-out;" alt="" /><br style="box-sizing: border-box;" />
<div style="box-sizing: border-box; min-width: 20%; max-width: 80%; min-height: 22px; display: inline-block; padding: 10px; margin: 0px auto; border-bottom: 1px solid #d9d9d9; font-size: 14px; color: #969696; line-height: 1.7;">TestFlight 邮件</div>
</div>
<div style="box-sizing: border-box; padding-bottom: 25px; width: 700px;"><img src="http://upload-images.jianshu.io/upload_images/941675-c3fb7885bbb548e4.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" data-original-src="http://upload-images.jianshu.io/upload_images/941675-c3fb7885bbb548e4.PNG?imageMogr2/auto-orient/strip%7CimageView2/2" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; cursor: zoom-in; transition: all 0.25s ease-in-out;" alt="" /><br style="box-sizing: border-box;" />
<div style="box-sizing: border-box; min-width: 20%; max-width: 80%; min-height: 22px; display: inline-block; padding: 10px; margin: 0px auto; border-bottom: 1px solid #d9d9d9; font-size: 14px; color: #969696; line-height: 1.7;">安装</div>
</div>
<div>
<div style="box-sizing: border-box; min-width: 20%; max-width: 80%; min-height: 22px; display: inline-block; padding: 10px; margin: 0px auto; border-bottom: 1px solid #d9d9d9; font-size: 14px; color: #969696; line-height: 1.7;"></div>
</div>
</div>
<img src ="http://www.cppblog.com/tx7do/aggbug/214721.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-03-02 15:58 <a href="http://www.cppblog.com/tx7do/archive/2017/03/02/214721.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Wireshark抓包iOS入门教程</title><link>http://www.cppblog.com/tx7do/archive/2017/03/02/214720.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 02 Mar 2017 07:54:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/03/02/214720.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/214720.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/03/02/214720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/214720.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/214720.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转载自：http://mrpeak.cn/blog/wireshark/网络抓包是个基础技能，对于网络协议的掌握有一定的要求。iOS上实现网络抓包可以用Charles（针对http和https），tcpdump（快速分析网络包），和Wireshare。之前写过一篇介绍tcpdump抓包的入门文章，和tcpdump相比，Wireshark提供丰富的GUI交互，而且能分析所有的网络协议，关键还...&nbsp;&nbsp;<a href='http://www.cppblog.com/tx7do/archive/2017/03/02/214720.html'>阅读全文</a><img src ="http://www.cppblog.com/tx7do/aggbug/214720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-03-02 15:54 <a href="http://www.cppblog.com/tx7do/archive/2017/03/02/214720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我是如何在SQLServer中处理每天四亿三千万记录的</title><link>http://www.cppblog.com/tx7do/archive/2017/02/16/214684.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 16 Feb 2017 03:29:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/02/16/214684.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/214684.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/02/16/214684.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/214684.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/214684.html</trackback:ping><description><![CDATA[<strong> </strong><strong style="color: red;">转载自：http://www.cnblogs.com/marvin/p/HowCanIHandleBigDataBySQLServer.html</strong><br />
<br />
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">首先声明，我只是个程序员，不是专业的DBA，以下这篇文章是从一个问题的解决过程去写的，而不是一开始就给大家一个正确的结果，如果文中有不对的地方，请各位数据库大牛给予指正，以便我能够更好的处理此次业务。</p>
<h2>项目背景</h2>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">这是给某数据中心做的一个项目，项目难度之大令人发指，这个项目真正的让我感觉到了，商场如战场，而我只是其中的一个小兵，太多的战术，太多的高层之间的较量，太多的内幕了。具体这个项目的情况，我有空再写相关的博文出来。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">这个项目是要求做环境监控，我们暂且把受监控的设备称为采集设备，采集设备的属性称为监控指标。项目要求：系统支持不少于<strong style="margin: 0px; padding: 0px;">10w</strong>个监控指标，每个监控指标的数据更新<strong style="margin: 0px; padding: 0px;">不大于20秒</strong>，存储延迟<strong style="margin: 0px; padding: 0px;">不超过120秒</strong>。那么，我们可以通过简单的计算得出较理想的状态&#8212;&#8212;要存储的数据为：<strong style="margin: 0px; padding: 0px;">每分钟30w，每个小时1800w，也就是每天4亿3千两百万</strong>。而实际，数据量会比这个大5%左右。（实际上大部分是信息垃圾，可以通过数据压缩进行处理的，但是别人就是要搞你，能咋办）</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">上面是项目要求的指标，我想很多有不少大数据处理经验的同学都会呲之以鼻，就这么点？嗯，我也看了很多大数据处理的东西，但是之前没处理过，看别人是头头是道，什么分布式，什么读写分离，看起来确实很容易解决。但是，问题没这么简单，上面我说了，这是一个非常恶劣的项目，是一个行业恶性竞争典型的项目。</p>
<ol style="margin: 0px; padding: 0px 0px 0px 40px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">
     <li style="margin: 0px; padding: 0px; list-style: decimal;">没有更多的服务器，而是这个服务器除了搭配数据库、集中采集器(就是数据解析、告警、存储的程序)，还要支持30w点的北向接口(SNMP)，在程序没有优化之前CPU常年占用80%以上。因为项目要求要使用双机热备，为了省事，减少不必要的麻烦，我们把相关的服务放在一起，以便能够充分利用HA的特性（外部购买的HA系统)</li>
     <li style="margin: 0px; padding: 0px; list-style: decimal;">系统数据正确性要求极其变态，要求从底层采集系统到最上层的监控系统，一条数据都不能差<br style="margin: 0px; padding: 0px;" />
     我们的系统架构如下，可以看到，其中数据库压力非常之大，尤其在LevelA节点：<br style="margin: 0px; padding: 0px;" />
     <img src="http://images.cnblogs.com/cnblogs_com/marvin/628523/o_%e9%a1%b9%e7%9b%ae%e6%9e%b6%e6%9e%84.png" style="margin: 0px; padding: 5px; border: 3px solid #6ce26c; max-width: 100%; border-radius: 8px;" alt="" /></li>
     <li style="margin: 0px; padding: 0px; list-style: decimal;">硬件配置如下：<br style="margin: 0px; padding: 0px;" />
     <strong style="margin: 0px; padding: 0px;">CPU</strong>：英特尔&#174; 至强&#174; 处理器 E5-2609 (4核, 2.40GHz, 10MB, 6.4 GT/s)<br style="margin: 0px; padding: 0px;" />
     <strong style="margin: 0px; padding: 0px;">内存</strong>：4GB (2x2GB) DDR3 RDIMM Memory, 1333MHz,ECC<br style="margin: 0px; padding: 0px;" />
     <strong style="margin: 0px; padding: 0px;">硬盘</strong>：500GB 7200 RPM 3.5'' SATA3 硬盘，Raid5.</li>
     <li style="margin: 0px; padding: 0px; list-style: decimal;">数据库版本<br style="margin: 0px; padding: 0px;" />
     采用的是SQLServer2012标准版，HP提供的正版软件，缺少很多企业版的NB功能。</li>
</ol>
<h2>写入瓶颈</h2>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">首先遇到的第一个拦路虎就是，我们发现现有的程序下，SQLServer根本处理不了这么多的数据量，具体情况是怎样的呢?</p>
<h3>我们的存储结构</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">一般为了存储大量的历史数据，我们都会进行一个物理的分表，否则每天上百万条的记录，一年下来就是几亿条。因此，原来我们的表结构是这样的：</p>
<pre style="margin-top: 10px; margin-bottom: 10px; padding: 6px 10px; white-space: pre-wrap; word-wrap: break-word; background-color: #f8f8f8; border-width: 1px 1px 1px 2px; border-style: dashed dashed dashed solid; border-color: #aaaaaa #aaaaaa #aaaaaa #6ce26c; border-image: initial; line-height: 19px; font-size: 13px; overflow: auto; border-radius: 3px; color: #333333;"><code sql"="" style="margin: auto; padding: 5px !important; line-height: 1.5 !important; vertical-align: middle; display: block; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; background: #ffffff; border: none !important; border-radius: 3px !important; height: auto; overflow-x: auto; color: #000000;"><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">CREATE</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">TABLE</span> [dbo].[His20140822]( [<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">No</span>] [<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">bigint</span>] <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">IDENTITY</span>(<span style="margin: 0px; padding: 0px; line-height: 1.8;">1</span>,<span style="margin: 0px; padding: 0px; line-height: 1.8;">1</span>) <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">NOT</span> <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">NULL</span>, [Dtime] [datetime] <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">NOT</span> <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">NULL</span>, [MgrObjId] [<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">varchar</span>](<span style="margin: 0px; padding: 0px; line-height: 1.8;">36</span>) <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">NOT</span> <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">NULL</span>, [<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">Id</span>] [<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">varchar</span>](<span style="margin: 0px; padding: 0px; line-height: 1.8;">50</span>) <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">NOT</span> <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">NULL</span>, [<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">Value</span>] [<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">varchar</span>](<span style="margin: 0px; padding: 0px; line-height: 1.8;">50</span>) <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">NOT</span> <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">NULL</span>, <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">CONSTRAINT</span> [PK_His20140822] PRIMARY <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">KEY</span> CLUSTERED ( [<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">No</span>] <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">ASC</span> )<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">WITH</span> (PAD_INDEX = <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">OFF</span>, STATISTICS_NORECOMPUTE = <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">OFF</span>, IGNORE_DUP_KEY = <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">OFF</span>, ALLOW_ROW_LOCKS = <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">ON</span>, ALLOW_PAGE_LOCKS = <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">ON</span>) <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">ON</span> [PRIMARY] ) <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">ON</span> [PRIMARY]</code></pre>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">No作为唯一的标识、采集设备Id(Guid)、监控指标Id(varchar(50))、记录时间、记录值。并以采集设备Id和监控指标Id作为索引，以便快速查找。</p>
<h3>批量写入</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">写入当时是用BulKCopy，没错，就是它，号称写入百万条记录都是秒级的</p>
<pre style="margin-top: 10px; margin-bottom: 10px; padding: 6px 10px; white-space: pre-wrap; word-wrap: break-word; background-color: #f8f8f8; border-width: 1px 1px 1px 2px; border-style: dashed dashed dashed solid; border-color: #aaaaaa #aaaaaa #aaaaaa #6ce26c; border-image: initial; line-height: 19px; font-size: 13px; overflow: auto; border-radius: 3px; color: #333333;"><code cs"="" style="margin: auto; padding: 5px !important; line-height: 1.5 !important; vertical-align: middle; display: block; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; background: #ffffff; border: none !important; border-radius: 3px !important; height: auto; overflow-x: auto; color: #000000;"> <span style="margin: 0px; padding: 0px; line-height: 1.8;"><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">public</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">static</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">int</span> <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">BatchInert</span>(<span style="margin: 0px; padding: 0px; line-height: 1.8;"><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">string</span> connectionString, <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">string</span> desTable, DataTable dt, <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">int</span> batchSize = <span style="margin: 0px; padding: 0px; line-height: 1.8;">500</span></span>) </span>{ <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">using</span> (<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">var</span> sbc = <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">new</span> SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction) { BulkCopyTimeout = <span style="margin: 0px; padding: 0px; line-height: 1.8;">300</span>, NotifyAfter = dt.Rows.Count, BatchSize = batchSize,             DestinationTableName = desTable }) { <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">foreach</span> (DataColumn column <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">in</span> dt.Columns) sbc.ColumnMappings.Add(column.ColumnName, column.ColumnName); sbc.WriteToServer(dt); } <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">return</span> dt.Rows.Count; }</code></pre>
<h3>存在什么问题？</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">上面的架构，在每天4千万的数据都是OK的。但是，调整为上述背景下的配置时，集中监控程序就内存溢出了，分析得知，接收的太多数据，放在了内存中，但是没有来得及写入到数据库中，最终导致了生成的数据大于消费的数据，导致内存溢出，程序无法工作。</p>
<h3>瓶颈到底在哪里？</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">是因为RAID磁盘的问题？是数据结构的问题？是硬件的问题？是SQLServer版本的问题？是没有分区表的问题？还是程序的问题？</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">当时时间只有一个星期，一个星期搞不好，项目监管就要我们滚蛋了，于是，有了连续工作48小时的壮举，有了到处打电话求人的抓鸡&#8230;&#8230;</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">但是，这个时候需要的是冷静，再冷静&#8230;&#8230;SQLServer版本？硬件？目前都不大可能换的。RAID磁盘阵列，应该不是。那么到底是什么，真TM的冷静不下来。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">大家可能体会不到现场那种紧张的气氛，其实过了这么久，我自己也都很难再回到那种情境。但是可以这么说，或许我们现在有了各种方法，或者处于局外人我们有更多思考，但是当一个项目压迫你快到放弃的时候，你那时的想法、考虑在现场环境因素的制约下，都可能出现重大的偏差。有可能让你快速的思考，也有可能思维停滞。有些同事在这种高压的环境下，甚至出现了更多的低级错误，思维已经完全乱了，效率更低了&#8230;&#8230;36小时没有合眼，或者只在工地上（下雨天到处都是泥巴，干了的话到时都是泥灰）眯两三个小时，然后继续干，连续这么一个星期！或者还要继续！</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">很多人给了很多想法，但是好像有用，又好像没用。等等，为什么是&#8220;好像有用，又好像没用&#8221;？我隐隐约约中，好像抓住了一丝方向，到底是什么？对了，验证，我们现在是跑在现场环境下，之前没有问题，不代表现在的压力下没有问题，要在一个大型系统中分析这么个小功能，影响太大了，我们应该分解它。是的，是&#8220;单元测试&#8221;，就是单个方法的测试，我们需要验证每个函数，每个独立的步骤到底耗时在哪里？</p>
<h3>逐步测试验证系统瓶颈</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; "><strong style="margin: 0px; padding: 0px;">修改BulkCopy的参数</strong><br style="margin: 0px; padding: 0px;" />
首先，我想到的是，修噶BulkCopy的各项参数，<code style="margin: 1px 5px; padding: 0px 5px !important; line-height: 1.8; vertical-align: middle; display: inline-block; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; background-color: #f5f5f5 !important; border: none !important; border-radius: 3px !important;">BulkCopyTimeout</code>、<code style="margin: 1px 5px; padding: 0px 5px !important; line-height: 1.8; vertical-align: middle; display: inline-block; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; background-color: #f5f5f5 !important; border: none !important; border-radius: 3px !important;">BatchSize</code>，不断的测试调整，结果总是在某个范围波动，实际并没有影响。或许会影响一些CPU计数，但是远远没有达到我的期望，写入的速度还是在5秒1w~2w波动，远远达不到要求20秒内要写20w的记录。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; "><strong style="margin: 0px; padding: 0px;">按采集设备存储</strong><br style="margin: 0px; padding: 0px;" />
是的，上述结构按每个指标每个值为一条记录，是不是太多的浪费？那么按采集设备+采集时间作为一条记录是否可行?问题是，怎么解决不同采集设备属性不一样的问题？这时，一个同事发挥才能了，监控指标+监控值可以按XML格式存储。哇，还能这样？查询呢，可以用for XML这种形式。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">于是有了这种结构：<code style="margin: 1px 5px; padding: 0px 5px !important; line-height: 1.8; vertical-align: middle; display: inline-block; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; background-color: #f5f5f5 !important; border: none !important; border-radius: 3px !important;">No、MgrObjId、Dtime、XMLData</code></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">结果验证，比上面的稍微好点，但是不是太明显。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; "><strong style="margin: 0px; padding: 0px;">数据表分区???</strong><br style="margin: 0px; padding: 0px;" />
那个时候还没有学会这个技能，看了下网上的文章，好像挺复杂的，时间不多了，不敢尝试。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; "><strong style="margin: 0px; padding: 0px;">停止其他程序</strong><br style="margin: 0px; padding: 0px;" />
我知道这个肯定是不行的，因为软件、硬件的架构暂时没法修改。但是我希望验证是不是这些因素影响的。结果发现，提示确实明显，但是还是没有达到要求。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; "><strong style="margin: 0px; padding: 0px;">难道是SQLServer的瓶颈?</strong><br style="margin: 0px; padding: 0px;" />
没辙了，难道这就是SQLServer的瓶颈？上网查了下相关的资料，可能是IO的瓶颈，尼玛，还能怎么办，要升级服务器，要更换数据库了吗，但是，项目方给吗？</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">等等，好像还有个东西，索引，对索引！索引的存在会影响插入、更新</p>
<h3>去掉索引</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">是的，去掉索引之后查询肯定慢，但是我必须先验证去掉索引是否会加快写入。如果果断把MgrObjId和Id两个字段的索引去掉。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">运行，奇迹出现了，每次写入10w条记录，在7~9秒内完全可以写入，这样就达到了系统的要求。</p>
<h3>查询怎么解决?</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">一个表一天要4亿多的记录，这是不可能查询的，在没有索引的情况下。怎么办！？我又想到了我们的老办法，物理分表。是的，原来我们按天分表，那么我们现在按小时分表。那么24个表，每个表只需存储1800w条记录左右。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">然后查询，一个属性在一个小时或者几个小时的历史记录。结果是：慢！慢！！慢！！！去掉索引的情况下查询1000多万的记录根本是不可想象的。还能怎么办？</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">继续分表，我想到了，我们还可以按底层的采集器继续分表，因为采集设备在不同的采集器中是不同的，那么我们查询历史曲线时，只有查单个指标的历史曲线，那么这样就可以分散在不同的表中了。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">说干就干，结果，通过按10个采集嵌入式并按24小时分表，每天生成240张表(历史表名类似这样：His_001_2014112615)，终于把一天写入4亿多条记录并支持简单的查询这个问题给解决掉了！！！</p>
<h2>查询优化</h2>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">在上述问题解决之后，这个项目的难点已经解决了一半，项目监管也不好意思过来找茬，不知道是出于什么样的战术安排吧。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">过了很长一段时间，到现在快年底了，问题又来了，就是要拖死你让你在年底不能验收其他项目。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">这次要求是这样的：因为上述是模拟10w个监控指标，而现在实际上线了，却只有5w个左右的设备。那么这个明显是不能达到标书要求的，不能验收。那么怎么办呢？这些聪明的人就想，既然监控指标减半，那么我们把时间也减半，不就达到了吗：就是说按现在5w的设备，那你要10s之内入库存储。我勒个去啊，按你这个逻辑，我们如果只有500个监控指标，岂不是要在0.1秒内入库？你不考虑下那些受监控设备的感想吗？</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">但是别人要玩你，你能怎么办？接招呗。结果把时间降到10秒之后，问题来了，大家仔细分析上面逻辑可以知道，分表是按采集器分的，现在采集器减少，但是数量增加了，发生什么事情呢，写入可以支持，但是，每张表的记录接近了400w，有些采集设备监控指标多的，要接近600w，怎么破？</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">于是技术相关人员开会讨论相关的举措。</p>
<h3>在不加索引的情况下怎么优化查询？</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">有同事提出了，where子句的顺序，会影响查询的结果，因为按你刷选之后的结果再处理，可以先刷选出一部分数据，然后继续进行下一个条件的过滤。听起来好像很有道理，但是SQLServer查询分析器不会自动优化吗？原谅我是个小白，我也是感觉而已，感觉应该跟VS的编译器一样，应该会自动优化吧。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">具体怎样，还是要用事实来说话：</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">结果同事修改了客户端之后，测试反馈，有较大的改善。我查看了代码：<br style="margin: 0px; padding: 0px;" />
<img src="http://images.cnblogs.com/cnblogs_com/marvin/628523/o_lishichaxyouh.png" style="margin: 0px; padding: 5px; border: 3px solid #6ce26c; max-width: 100%; border-radius: 8px;" alt="" /></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">难道真的有这么大的影响？等等，是不是忘记清空缓存，造成了假象？<br style="margin: 0px; padding: 0px;" />
于是让同事执行下述语句以便得出更多的信息：</p>
<pre style="margin-top: 10px; margin-bottom: 10px; padding: 6px 10px; white-space: pre-wrap; word-wrap: break-word; background-color: #f8f8f8; border-width: 1px 1px 1px 2px; border-style: dashed dashed dashed solid; border-color: #aaaaaa #aaaaaa #aaaaaa #6ce26c; border-image: initial; line-height: 19px; font-size: 13px; overflow: auto; border-radius: 3px; color: #333333;"><code sql"="" style="margin: auto; padding: 5px !important; line-height: 1.5 !important; vertical-align: middle; display: block; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; background: #ffffff; border: none !important; border-radius: 3px !important; height: auto; overflow-x: auto; color: #000000;"><span style="margin: 0px; padding: 0px; color: green; line-height: 1.8;">--优化之前</span> DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">SET</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">STATISTICS</span> IO <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">ON</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">select</span> Dtime,<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">Value</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">from</span> dbo.his20140825 <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">WHERE</span> Dtime&gt;=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">''</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">AND</span> Dtime&lt;=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">''</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">AND</span> MgrObjId=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">''</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">AND</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">Id</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">''</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">SET</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">STATISTICS</span> IO <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">OFF</span> <span style="margin: 0px; padding: 0px; color: green; line-height: 1.8;">--优化之后</span> DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">SET</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">STATISTICS</span> IO <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">ON</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">select</span> Dtime,<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">Value</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">from</span> dbo.his20140825 <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">WHERE</span> MgrObjId=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">''</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">AND</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">Id</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">''</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">AND</span> Dtime&gt;=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">''</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">AND</span> Dtime&lt;=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 1.8;">''</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">SET</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">STATISTICS</span> IO <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 1.8;">OFF</span></code></pre>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">结果如下：<br style="margin: 0px; padding: 0px;" />
<img src="http://images.cnblogs.com/cnblogs_com/marvin/628523/o_huancunzhixingjieguo.jpg" style="margin: 0px; padding: 5px; border: 3px solid #6ce26c; max-width: 100%; border-radius: 8px;" alt="" /></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">优化之前反而更好了？</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">仔细查看IO数据，发现，预读是一样的，就是说我们要查询的数据记录都是一致的，物理读、表扫描也是一直的。而逻辑读取稍有区别，应该是缓存命中数导致的。也就是说，<strong style="margin: 0px; padding: 0px;">在不建立索引的情况下，where子句的条件顺序，对查询结果优化作用不明显</strong>。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">那么，就只能通过索引的办法了。</p>
<h3>建立索引的尝试</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">建立索引不是简单的事情，是需要了解一些基本的知识的，在这个过程中，我走了不少弯路，最终才把索引建立起来。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">下面的实验基于以下记录总数做的验证：<br style="margin: 0px; padding: 0px;" />
<img src="http://images.cnblogs.com/cnblogs_com/marvin/628523/o_daxiao.png" style="margin: 0px; padding: 5px; border: 3px solid #6ce26c; max-width: 100%; border-radius: 8px;" alt="" /></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; "><strong style="margin: 0px; padding: 0px;">按单个字段建立索引</strong><br style="margin: 0px; padding: 0px;" />
这个想法，主要是受我建立数据结构影响的，我内存中的数据结构为：<code style="margin: 1px 5px; padding: 0px 5px !important; line-height: 1.8; vertical-align: middle; display: inline-block; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; background-color: #f5f5f5 !important; border: none !important; border-radius: 3px !important;">Dictionary&lt;MgrObjId,Dictionary&lt;Id,Property&gt;&gt;</code>。我以为先建立MgrObjId的索引，再建立Id的索引，SQLServer查询时，就会更快。<br style="margin: 0px; padding: 0px;" />
<img src="http://images.cnblogs.com/cnblogs_com/marvin/628523/o_mgrobj_index.png" style="margin: 0px; padding: 5px; border: 3px solid #6ce26c; max-width: 100%; border-radius: 8px;" alt="" /></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">先按MgrObjId建立索引，索引大小为550M，耗时5分25秒。结果，如上图的预估计划一样，根本没有起作用，反而更慢了。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; "><strong style="margin: 0px; padding: 0px;">按多个条件建立索引</strong><br style="margin: 0px; padding: 0px;" />
OK，既然上面的不行，那么我们按多个条件建立索引又如何？<code style="margin: 1px 5px; padding: 0px 5px !important; line-height: 1.8; vertical-align: middle; display: inline-block; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; background-color: #f5f5f5 !important; border: none !important; border-radius: 3px !important;">CREATE NONCLUSTERED INDEX Idx_His20141008 ON dbo.his20141008(MgrObjId,Id,Dtime)</code></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">结果，查询速度确实提高了一倍：<br style="margin: 0px; padding: 0px;" />
<img src="http://images.cnblogs.com/cnblogs_com/marvin/628523/o_index_optimiz.png" style="margin: 0px; padding: 5px; border: 3px solid #6ce26c; max-width: 100%; border-radius: 8px;" alt="" /></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">等等，难道这就是索引的好处？花费7分25秒，用1.1G的空间换取来的就是这些？肯定是有什么地方不对了，于是开始翻查资料，查看一些相关书籍，最终，有了较大的进展。</p>
<h3>正确的建立索引</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">首先，我们需要明白几个索引的要点：</p>
<ul style="margin: 0px 0px 0px 30px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">
     <li style="margin: 0px; padding: 0px; list-style: disc;"><strong style="margin: 0px; padding: 0px;">索引之后，按索引字段重复最少的来排序，会达到最优的效果</strong>。以我们的表来说，如果建立了No的聚集索引，把No放在where子句的第一位是最佳的，其次是Id，然后是MgrObjId，最后是时间，时间索引如果表是一个小时的，最好不要用</li>
     <li style="margin: 0px; padding: 0px; list-style: disc;"><strong style="margin: 0px; padding: 0px;">where子句的顺序决定了查询分析器是否使用索引来查询</strong>。比如建立了MgrObjId和Id的索引，那么<code style="margin: 1px 5px; padding: 0px 5px !important; line-height: 1.8; vertical-align: middle; display: inline-block; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; background-color: #f5f5f5 !important; border: none !important; border-radius: 3px !important;">where MgrObjId='' and Id='' and Dtime=''</code>就会采用索引查找，而<code style="margin: 1px 5px; padding: 0px 5px !important; line-height: 1.8; vertical-align: middle; display: inline-block; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; background-color: #f5f5f5 !important; border: none !important; border-radius: 3px !important;">where Dtime='' and MgrObjId='' and Id=''</code>则不一定会采用索引查找。</li>
     <li style="margin: 0px; padding: 0px; list-style: disc;"><strong style="margin: 0px; padding: 0px;">把非索引列的结果列放在包含列中</strong>。因为我们条件是MgrObjId和Id以及Dtime，因此返回结果中只需包含Dtime和Value即可，因此把Dtime和Value放在包含列中，返回的索引结果就有这个值，不用再查物理表，可以达到最优的速度。</li>
</ul>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">跟上述几点原则，我们建立以下的索引：<code style="margin: 1px 5px; padding: 0px 5px !important; line-height: 1.8; vertical-align: middle; display: inline-block; font-family: &quot;Courier New&quot;, sans-serif !important; font-size: 12px !important; background-color: #f5f5f5 !important; border: none !important; border-radius: 3px !important;">CREATE NONCLUSTERED INDEX Idx_His20141008 ON dbo.his20141008(MgrObjId,Id) INCLUDE(Value,Dtime)</code></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">耗费时间为：6分多钟，索引大小为903M。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">我们看看预估计划：<br style="margin: 0px; padding: 0px;" />
<img src="http://images.cnblogs.com/cnblogs_com/marvin/628523/o_yugujieguo.png" style="margin: 0px; padding: 5px; border: 3px solid #6ce26c; max-width: 100%; border-radius: 8px;" alt="" /></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">可以看到，这里完全使用了索引，没有额外的消耗。而实际执行的结果，1秒都不到，竟然不用一秒就在1100w的记录中把结果筛选了出来！！帅呆了！！</p>
<h3>怎么应用索引?</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">既然写入完成了、读取完成了，怎么结合呢？我们可以把一个小时之前的数据建立索引，当前一个小时的数据就不建立索引。也就是，不要再创建表的时候建立索引！！</p>
<h3>还能怎么优化</h3>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">可以尝试读写分离，写两个库，一个是实时库，一个是只读库。一个小时内的数据查询实时库，一个小时之前的数据查询只读库；只读库定时存储，然后建立索引；超过一个星期的数据，进行分析处理再存储。这样，无论查询什么时间段的数据，都能够正确处理了&#8212;&#8212;一个小时之内的查询实时库，一个小时到一个星期内的查询只读库，一个星期之前的查询报表库。</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">如果不需要物理分表，则在只读库中，定时重建索引即可。</p>
<h2>总结</h2>
<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">如何在SQLServer中处理亿万级别的数据(历史数据)，可以按以下方面进行：</p>
<ul style="margin: 0px 0px 0px 30px; padding: 0px; color: #333333; font-family: verdana, Arial, Helvetica, sans-serif; ">
     <li style="margin: 0px; padding: 0px; list-style: disc;">去掉表的所有索引</li>
     <li style="margin: 0px; padding: 0px; list-style: disc;">用SqlBulkCopy进行插入</li>
     <li style="margin: 0px; padding: 0px; list-style: disc;">分表或者分区，减少每个表的数据总量</li>
     <li style="margin: 0px; padding: 0px; list-style: disc;">在某个表完全写完之后再建立索引</li>
     <li style="margin: 0px; padding: 0px; list-style: disc;">正确的指定索引字段</li>
     <li style="margin: 0px; padding: 0px; list-style: disc;">把需要用到的字段放到包含索引中(在返回的索引中就包含了一切)</li>
     <li style="margin: 0px; padding: 0px; list-style: disc;">查询的时候只返回所需的字段<br style="margin: 0px; padding: 0px;" />
     </li>
</ul>
<img src ="http://www.cppblog.com/tx7do/aggbug/214684.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-02-16 11:29 <a href="http://www.cppblog.com/tx7do/archive/2017/02/16/214684.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 动态生成分区脚本</title><link>http://www.cppblog.com/tx7do/archive/2017/02/16/214683.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 16 Feb 2017 03:17:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2017/02/16/214683.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/214683.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2017/02/16/214683.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/214683.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/214683.html</trackback:ping><description><![CDATA[<strong> </strong><strong style="color: red;">转载自：http://www.cnblogs.com/gaizai/archive/2011/01/14/1935579.html</strong><br />
<br />
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; margin-left: 21pt; text-indent: -21pt; color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; "><strong><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">一、</span></strong><strong><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">前言</span></strong></p>
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; text-indent: 21pt; color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; "><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">前段时间使用表分区比较多，虽然已经写了<span style="line-height: 1.8;"><a href="http://www.cnblogs.com/gaizai/archive/2010/11/05/1870071.html" style="outline: none; text-decoration: none; color: #3d81ee; border-bottom-width: 1px; border-bottom-style: dashed;">SQL Server&nbsp;<span style="line-height: 1.8;">合并（删除）分区解惑</span></a></span></span><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">、<span style="line-height: 1.8;"><a href="http://www.cnblogs.com/gaizai/archive/2010/12/31/1923232.html" style="outline: none; text-decoration: none; color: #3d81ee; border-bottom-width: 1px; border-bottom-style: dashed;">SQL Server 2005&nbsp;<span style="line-height: 1.8;">分区模板与实例</span></a></span>，但是在实践中一直感觉修改SQL脚本的时间比较多，一直想抽个时间来把分区脚本进行动态化，今天终于付之于行动了。需要说明的一点，下面的脚本并不能满足所有情况，用户可以根据自己的需要进行相应的调整，应该可以满足你的需求的。</span></p>
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; text-indent: 21pt; color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; "><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">在SQL Server 2005中只能通过SQL脚本来创建表分区，而在SQL Server 2008的SSMS中已经提供了操作界面进行表分区，但是也不能把操作生成SQL脚本，所以，下面的SQL的应用场景包括SQL Server 2005、SQL Server 2008。</span></p>
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; ">&nbsp;</p>
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; margin-left: 21pt; text-indent: -21pt; color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; "><strong><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">二、</span></strong><strong><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">分解</span></strong></p>
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; text-indent: 21pt; color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; "><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">下面就是生成分区的脚本了，在执行之前，你需要填写数据库名称、表名、分区表字段、需要的分区数、保存分区文件的路径、分区初始化大小、分区文件的增量、分区边界值；</span></p>
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; text-indent: 21pt; color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; "><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">这里的分区边界值是按照int类型进行增量计算的，比如你想以每100W进行范围分区的话，那你只要设置@FunValue为100W；如果你的分区边界值是其它类型值或者是不等范围的分区，那么你只要修改这个变量为字符串，并对分区函数的生成代码进行相应修改就可以满足你的需求了。</span></p>
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; text-indent: 21pt; color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; "><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">通常情况下，我们会以一个表Id(int)，并且是自增作为分区字段，这样就很容易区分历史数据了，而且对分区的操作隔离也是最明显的。</span></p>
<div><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">--</span><span style="color: #008080; ">生成分区脚本</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@DataBaseName</span>&nbsp;<span style="font-weight: bold;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold; ">50</span>)<span style="color: #008080; ">--</span><span style="color: #008080; ">数据库名称</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@TableName</span>&nbsp;<span style="font-weight: bold;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold; ">50</span>)<span style="color: #008080; ">--</span><span style="color: #008080; ">表名称</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@ColumnName</span>&nbsp;<span style="font-weight: bold;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold; ">50</span>)<span style="color: #008080; ">--</span><span style="color: #008080; ">字段名称</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@PartNumber</span>&nbsp;<span style="font-weight: bold;">INT</span><span style="color: #008080; ">--</span><span style="color: #008080; ">需要分多少个区</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@Location</span>&nbsp;<span style="font-weight: bold;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold; ">50</span>)<span style="color: #008080; ">--</span><span style="color: #008080; ">保存分区文件的路径</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@Size</span>&nbsp;<span style="font-weight: bold;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold; ">50</span>)<span style="color: #008080; ">--</span><span style="color: #008080; ">分区初始化大小</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@FileGrowth</span>&nbsp;<span style="font-weight: bold;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold; ">50</span>)<span style="color: #008080; ">--</span><span style="color: #008080; ">分区文件增量</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@FunValue</span>&nbsp;<span style="font-weight: bold;">INT</span><span style="color: #008080; ">--</span><span style="color: #008080; ">分区分段值</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@i</span>&nbsp;<span style="font-weight: bold;">INT</span><br />
<span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@PartNumberStr</span>&nbsp;<span style="font-weight: bold;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold; ">50</span>)<br />
<span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@sql</span>&nbsp;<span style="font-weight: bold;">NVARCHAR</span>(<span style="color: #FF00FF; ">max</span>)<br />
<br />
<span style="color: #008080; ">--</span><span style="color: #008080; ">设置下面变量</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@DataBaseName</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">MyDataBase</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@TableName</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">User</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@ColumnName</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">Id</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@PartNumber</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #800000; font-weight: bold; ">4</span><br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@Location</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">E:\DataBase\</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@Size</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">30MB</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@FileGrowth</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">10%</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@FunValue</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #800000; font-weight: bold; ">10000000</span><br />
<br />
<br />
<span style="color: #008080; ">--</span><span style="color: #008080; ">1.创建文件组</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@i</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #800000; font-weight: bold; ">1</span><br />
<span style="color: #0000FF; ">PRINT</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">--1.创建文件组</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">WHILE</span>&nbsp;<span style="color: #008000; ">@i</span>&nbsp;<span style="color: #808080; ">&lt;=</span>&nbsp;<span style="color: #008000; ">@PartNumber</span><br />
<span style="color: #0000FF; ">BEGIN</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@PartNumberStr</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;&nbsp;<span style="color: #FF00FF; ">RIGHT</span>(<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">0</span><span style="color: #FF0000; ">'</span>&nbsp;<span style="color: #808080; ">+</span>&nbsp;<span style="color: #FF00FF; ">CONVERT</span>(<span style="font-weight: bold;">NVARCHAR</span>,<span style="color: #008000; ">@i</span>),<span style="color: #800000; font-weight: bold; ">2</span>)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@sql</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">ALTER&nbsp;DATABASE&nbsp;[</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@DataBaseName</span>&nbsp;<span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">]<br />
ADD&nbsp;FILEGROUP&nbsp;[FG_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@TableName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@PartNumberStr</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">]</span><span style="color: #FF0000; ">'</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">PRINT</span>&nbsp;<span style="color: #008000; ">@sql</span>&nbsp;<span style="color: #808080; ">+</span>&nbsp;<span style="font-weight: bold;">CHAR</span>(<span style="color: #800000; font-weight: bold; ">13</span>)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@i</span><span style="color: #808080; ">=</span><span style="color: #008000; ">@i</span><span style="color: #808080; ">+</span><span style="color: #800000; font-weight: bold; ">1</span><br />
<span style="color: #0000FF; ">END</span><br />
<br />
<span style="color: #008080; ">--</span><span style="color: #008080; ">2.创建文件</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@i</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #800000; font-weight: bold; ">1</span><br />
<span style="color: #0000FF; ">PRINT</span>&nbsp;<span style="font-weight: bold;">CHAR</span>(<span style="color: #800000; font-weight: bold; ">13</span>)<span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">--2.创建文件</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">WHILE</span>&nbsp;<span style="color: #008000; ">@i</span>&nbsp;<span style="color: #808080; ">&lt;=</span>&nbsp;<span style="color: #008000; ">@PartNumber</span><br />
<span style="color: #0000FF; ">BEGIN</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@PartNumberStr</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;&nbsp;<span style="color: #FF00FF; ">RIGHT</span>(<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">0</span><span style="color: #FF0000; ">'</span>&nbsp;<span style="color: #808080; ">+</span>&nbsp;<span style="color: #FF00FF; ">CONVERT</span>(<span style="font-weight: bold;">NVARCHAR</span>,<span style="color: #008000; ">@i</span>),<span style="color: #800000; font-weight: bold; ">2</span>)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@sql</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">ALTER&nbsp;DATABASE&nbsp;[</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@DataBaseName</span>&nbsp;<span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">]<br />
ADD&nbsp;FILE<br />
(NAME&nbsp;=&nbsp;N</span><span style="color: #FF0000; ">''</span><span style="color: #FF0000; ">FG_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@TableName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@PartNumberStr</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_data</span><span style="color: #FF0000; ">''</span><span style="color: #FF0000; ">,FILENAME&nbsp;=&nbsp;N</span><span style="color: #FF0000; ">'''</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@Location</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">FG_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@TableName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@PartNumberStr</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_data.ndf</span><span style="color: #FF0000; ">''</span><span style="color: #FF0000; ">,SIZE&nbsp;=&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@Size</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">,&nbsp;FILEGROWTH&nbsp;=&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@FileGrowth</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">&nbsp;)<br />
TO&nbsp;FILEGROUP&nbsp;[FG_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@TableName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@PartNumberStr</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">];</span><span style="color: #FF0000; ">'</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">PRINT</span>&nbsp;<span style="color: #008000; ">@sql</span>&nbsp;<span style="color: #808080; ">+</span>&nbsp;<span style="font-weight: bold;">CHAR</span>(<span style="color: #800000; font-weight: bold; ">13</span>)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@i</span><span style="color: #808080; ">=</span><span style="color: #008000; ">@i</span><span style="color: #808080; ">+</span><span style="color: #800000; font-weight: bold; ">1</span><br />
<span style="color: #0000FF; ">END</span><br />
<br />
<br />
<span style="color: #008080; ">--</span><span style="color: #008080; ">3.创建分区函数</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">PRINT</span>&nbsp;<span style="font-weight: bold;">CHAR</span>(<span style="color: #800000; font-weight: bold; ">13</span>)<span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">--3.创建分区函数</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@FunValueStr</span>&nbsp;<span style="font-weight: bold;">NVARCHAR</span>(<span style="color: #FF00FF; ">MAX</span>)&nbsp;<br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@i</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #800000; font-weight: bold; ">1</span><br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@FunValueStr</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">''</span><br />
<span style="color: #0000FF; ">WHILE</span>&nbsp;<span style="color: #008000; ">@i</span>&nbsp;<span style="color: #808080; ">&lt;</span>&nbsp;<span style="color: #008000; ">@PartNumber</span><br />
<span style="color: #0000FF; ">BEGIN</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@FunValueStr</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #008000; ">@FunValueStr</span>&nbsp;<span style="color: #808080; ">+</span>&nbsp;<span style="color: #FF00FF; ">convert</span>(<span style="font-weight: bold;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold; ">50</span>),(<span style="color: #008000; ">@i</span><span style="color: #808080; ">*</span><span style="color: #008000; ">@FunValue</span>))&nbsp;<span style="color: #808080; ">+</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">,</span><span style="color: #FF0000; ">'</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@i</span><span style="color: #808080; ">=</span><span style="color: #008000; ">@i</span><span style="color: #808080; ">+</span><span style="color: #800000; font-weight: bold; ">1</span><br />
<span style="color: #0000FF; ">END</span><br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@FunValueStr</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF00FF; ">substring</span>(<span style="color: #008000; ">@FunValueStr</span>,<span style="color: #800000; font-weight: bold; ">1</span>,<span style="color: #FF00FF; ">len</span>(<span style="color: #008000; ">@FunValueStr</span>)<span style="color: #808080; ">-</span><span style="color: #800000; font-weight: bold; ">1</span>)<br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@sql</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">CREATE&nbsp;PARTITION&nbsp;FUNCTION<br />
Fun_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@TableName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">(INT)&nbsp;AS<br />
RANGE&nbsp;RIGHT<br />
FOR&nbsp;VALUES(</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@FunValueStr</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">)</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">PRINT</span>&nbsp;<span style="color: #008000; ">@sql</span>&nbsp;<span style="color: #808080; ">+</span>&nbsp;<span style="font-weight: bold;">CHAR</span>(<span style="color: #800000; font-weight: bold; ">13</span>)<br />
<br />
<br />
<span style="color: #008080; ">--</span><span style="color: #008080; ">4.创建分区方案</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">PRINT</span>&nbsp;<span style="font-weight: bold;">CHAR</span>(<span style="color: #800000; font-weight: bold; ">13</span>)<span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">--4.创建分区方案</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">DECLARE</span>&nbsp;<span style="color: #008000; ">@FileGroupStr</span>&nbsp;<span style="font-weight: bold;">NVARCHAR</span>(<span style="color: #FF00FF; ">MAX</span>)&nbsp;<br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@i</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #800000; font-weight: bold; ">1</span><br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@FileGroupStr</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">''</span><br />
<span style="color: #0000FF; ">WHILE</span>&nbsp;<span style="color: #008000; ">@i</span>&nbsp;<span style="color: #808080; ">&lt;=</span>&nbsp;<span style="color: #008000; ">@PartNumber</span><br />
<span style="color: #0000FF; ">BEGIN</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@PartNumberStr</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;&nbsp;<span style="color: #FF00FF; ">RIGHT</span>(<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">0</span><span style="color: #FF0000; ">'</span>&nbsp;<span style="color: #808080; ">+</span>&nbsp;<span style="color: #FF00FF; ">CONVERT</span>(<span style="font-weight: bold;">NVARCHAR</span>,<span style="color: #008000; ">@i</span>),<span style="color: #800000; font-weight: bold; ">2</span>)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@FileGroupStr</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #008000; ">@FileGroupStr</span>&nbsp;<span style="color: #808080; ">+</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">[FG_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@TableName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@PartNumberStr</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">],</span><span style="color: #FF0000; ">'</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@i</span><span style="color: #808080; ">=</span><span style="color: #008000; ">@i</span><span style="color: #808080; ">+</span><span style="color: #800000; font-weight: bold; ">1</span><br />
<span style="color: #0000FF; ">END</span><br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@FileGroupStr</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF00FF; ">substring</span>(<span style="color: #008000; ">@FileGroupStr</span>,<span style="color: #800000; font-weight: bold; ">1</span>,<span style="color: #FF00FF; ">len</span>(<span style="color: #008000; ">@FileGroupStr</span>)<span style="color: #808080; ">-</span><span style="color: #800000; font-weight: bold; ">1</span>)<br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@sql</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">CREATE&nbsp;PARTITION&nbsp;SCHEME<br />
Sch_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@TableName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">&nbsp;AS<br />
PARTITION&nbsp;Fun_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@TableName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; "><br />
TO(</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@FileGroupStr</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">)</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">PRINT</span>&nbsp;<span style="color: #008000; ">@sql</span>&nbsp;<span style="color: #808080; ">+</span>&nbsp;<span style="font-weight: bold;">CHAR</span>(<span style="color: #800000; font-weight: bold; ">13</span>)<br />
<br />
<br />
<span style="color: #008080; ">--</span><span style="color: #008080; ">5.分区函数的记录数</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">PRINT</span>&nbsp;<span style="font-weight: bold;">CHAR</span>(<span style="color: #800000; font-weight: bold; ">13</span>)<span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">--5.分区函数的记录数</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">SET</span>&nbsp;<span style="color: #008000; ">@sql</span>&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">SELECT&nbsp;$PARTITION.Fun_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@TableName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">(</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">)&nbsp;AS&nbsp;Partition_num,<br />
&nbsp;&nbsp;MIN(</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">)&nbsp;AS&nbsp;Min_value,MAX(</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">)&nbsp;AS&nbsp;Max_value,COUNT(1)&nbsp;AS&nbsp;Record_num<br />
FROM&nbsp;dbo.</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@TableName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; "><br />
GROUP&nbsp;BY&nbsp;$PARTITION.Fun_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@TableName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">(</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">)<br />
ORDER&nbsp;BY&nbsp;$PARTITION.Fun_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@TableName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">_</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">(</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">+</span><span style="color: #008000; ">@ColumnName</span><span style="color: #808080; ">+</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">);</span><span style="color: #FF0000; ">'</span><br />
<span style="color: #0000FF; ">PRINT</span>&nbsp;<span style="color: #008000; ">@sql</span>&nbsp;<span style="color: #808080; ">+</span>&nbsp;<span style="font-weight: bold;">CHAR</span>(<span style="color: #800000; font-weight: bold; ">13</span>)</div>
</span></div>
<br />
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; "><strong><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">生成的脚本如下：<br />
</span></strong></p>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">--</span><span style="color: #008080; ">1.创建文件组</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">ALTER</span>&nbsp;<span style="color: #0000FF; ">DATABASE</span>&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">MyDataBase</span><span style="color: #FF0000; ">]</span><br />
<span style="color: #0000FF; ">ADD</span>&nbsp;FILEGROUP&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">FG_User_Id_01</span><span style="color: #FF0000; ">]</span><br />
<br />
<span style="color: #0000FF; ">ALTER</span>&nbsp;<span style="color: #0000FF; ">DATABASE</span>&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">MyDataBase</span><span style="color: #FF0000; ">]</span><br />
<span style="color: #0000FF; ">ADD</span>&nbsp;FILEGROUP&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">FG_User_Id_02</span><span style="color: #FF0000; ">]</span><br />
<br />
<span style="color: #0000FF; ">ALTER</span>&nbsp;<span style="color: #0000FF; ">DATABASE</span>&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">MyDataBase</span><span style="color: #FF0000; ">]</span><br />
<span style="color: #0000FF; ">ADD</span>&nbsp;FILEGROUP&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">FG_User_Id_03</span><span style="color: #FF0000; ">]</span><br />
<br />
<span style="color: #0000FF; ">ALTER</span>&nbsp;<span style="color: #0000FF; ">DATABASE</span>&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">MyDataBase</span><span style="color: #FF0000; ">]</span><br />
<span style="color: #0000FF; ">ADD</span>&nbsp;FILEGROUP&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">FG_User_Id_04</span><span style="color: #FF0000; ">]</span><br />
<br />
<br />
<span style="color: #008080; ">--</span><span style="color: #008080; ">2.创建文件</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">ALTER</span>&nbsp;<span style="color: #0000FF; ">DATABASE</span>&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">MyDataBase</span><span style="color: #FF0000; ">]</span><br />
<span style="color: #0000FF; ">ADD</span>&nbsp;<span style="color: #0000FF; ">FILE</span><br />
(NAME&nbsp;<span style="color: #808080; ">=</span>&nbsp;N<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">FG_User_Id_01_data</span><span style="color: #FF0000; ">'</span>,FILENAME&nbsp;<span style="color: #808080; ">=</span>&nbsp;N<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">E:\DataBase\FG_User_Id_01_data.ndf</span><span style="color: #FF0000; ">'</span>,SIZE&nbsp;<span style="color: #808080; ">=</span>&nbsp;30MB,&nbsp;FILEGROWTH&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #800000; font-weight: bold; ">10</span><span style="color: #808080; ">%</span>&nbsp;)<br />
<span style="color: #0000FF; ">TO</span>&nbsp;FILEGROUP&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">FG_User_Id_01</span><span style="color: #FF0000; ">]</span>;<br />
<br />
<span style="color: #0000FF; ">ALTER</span>&nbsp;<span style="color: #0000FF; ">DATABASE</span>&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">MyDataBase</span><span style="color: #FF0000; ">]</span><br />
<span style="color: #0000FF; ">ADD</span>&nbsp;<span style="color: #0000FF; ">FILE</span><br />
(NAME&nbsp;<span style="color: #808080; ">=</span>&nbsp;N<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">FG_User_Id_02_data</span><span style="color: #FF0000; ">'</span>,FILENAME&nbsp;<span style="color: #808080; ">=</span>&nbsp;N<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">E:\DataBase\FG_User_Id_02_data.ndf</span><span style="color: #FF0000; ">'</span>,SIZE&nbsp;<span style="color: #808080; ">=</span>&nbsp;30MB,&nbsp;FILEGROWTH&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #800000; font-weight: bold; ">10</span><span style="color: #808080; ">%</span>&nbsp;)<br />
<span style="color: #0000FF; ">TO</span>&nbsp;FILEGROUP&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">FG_User_Id_02</span><span style="color: #FF0000; ">]</span>;<br />
<br />
<span style="color: #0000FF; ">ALTER</span>&nbsp;<span style="color: #0000FF; ">DATABASE</span>&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">MyDataBase</span><span style="color: #FF0000; ">]</span><br />
<span style="color: #0000FF; ">ADD</span>&nbsp;<span style="color: #0000FF; ">FILE</span><br />
(NAME&nbsp;<span style="color: #808080; ">=</span>&nbsp;N<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">FG_User_Id_03_data</span><span style="color: #FF0000; ">'</span>,FILENAME&nbsp;<span style="color: #808080; ">=</span>&nbsp;N<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">E:\DataBase\FG_User_Id_03_data.ndf</span><span style="color: #FF0000; ">'</span>,SIZE&nbsp;<span style="color: #808080; ">=</span>&nbsp;30MB,&nbsp;FILEGROWTH&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #800000; font-weight: bold; ">10</span><span style="color: #808080; ">%</span>&nbsp;)<br />
<span style="color: #0000FF; ">TO</span>&nbsp;FILEGROUP&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">FG_User_Id_03</span><span style="color: #FF0000; ">]</span>;<br />
<br />
<span style="color: #0000FF; ">ALTER</span>&nbsp;<span style="color: #0000FF; ">DATABASE</span>&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">MyDataBase</span><span style="color: #FF0000; ">]</span><br />
<span style="color: #0000FF; ">ADD</span>&nbsp;<span style="color: #0000FF; ">FILE</span><br />
(NAME&nbsp;<span style="color: #808080; ">=</span>&nbsp;N<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">FG_User_Id_04_data</span><span style="color: #FF0000; ">'</span>,FILENAME&nbsp;<span style="color: #808080; ">=</span>&nbsp;N<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">E:\DataBase\FG_User_Id_04_data.ndf</span><span style="color: #FF0000; ">'</span>,SIZE&nbsp;<span style="color: #808080; ">=</span>&nbsp;30MB,&nbsp;FILEGROWTH&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #800000; font-weight: bold; ">10</span><span style="color: #808080; ">%</span>&nbsp;)<br />
<span style="color: #0000FF; ">TO</span>&nbsp;FILEGROUP&nbsp;<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">FG_User_Id_04</span><span style="color: #FF0000; ">]</span>;<br />
<br />
<br />
<span style="color: #008080; ">--</span><span style="color: #008080; ">3.创建分区函数</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">CREATE</span>&nbsp;PARTITION&nbsp;<span style="color: #0000FF; ">FUNCTION</span><br />
Fun_User_Id(<span style="font-weight: bold;">INT</span>)&nbsp;<span style="color: #0000FF; ">AS</span><br />
RANGE&nbsp;<span style="color: #FF00FF; ">RIGHT</span><br />
<span style="color: #0000FF; ">FOR</span>&nbsp;<span style="color: #0000FF; ">VALUES</span>(<span style="color: #800000; font-weight: bold; ">10000000</span>,<span style="color: #800000; font-weight: bold; ">20000000</span>,<span style="color: #800000; font-weight: bold; ">30000000</span>)<br />
<br />
<br />
<span style="color: #008080; ">--</span><span style="color: #008080; ">4.创建分区方案</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">CREATE</span>&nbsp;PARTITION&nbsp;SCHEME<br />
Sch_User_Id&nbsp;<span style="color: #0000FF; ">AS</span><br />
PARTITION&nbsp;Fun_User_Id<br />
<span style="color: #0000FF; ">TO</span>(<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">FG_User_Id_01</span><span style="color: #FF0000; ">]</span>,<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">FG_User_Id_02</span><span style="color: #FF0000; ">]</span>,<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">FG_User_Id_03</span><span style="color: #FF0000; ">]</span>,<span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">FG_User_Id_04</span><span style="color: #FF0000; ">]</span>)<br />
<br />
<br />
<span style="color: #008080; ">--</span><span style="color: #008080; ">5.分区函数的记录数</span><span style="color: #008080; "><br />
</span><span style="color: #0000FF; ">SELECT</span>&nbsp;$PARTITION.Fun_User_Id(Id)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;Partition_num,<br />
&nbsp;&nbsp;<span style="color: #FF00FF; ">MIN</span>(Id)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;Min_value,<span style="color: #FF00FF; ">MAX</span>(Id)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;Max_value,<span style="color: #FF00FF; ">COUNT</span>(<span style="color: #800000; font-weight: bold; ">1</span>)&nbsp;<span style="color: #0000FF; ">AS</span>&nbsp;Record_num<br />
<span style="color: #0000FF; ">FROM</span>&nbsp;dbo.<span style="color: #FF00FF; ">User</span><br />
<span style="color: #0000FF; ">GROUP</span>&nbsp;<span style="color: #0000FF; ">BY</span>&nbsp;$PARTITION.Fun_User_Id(Id)<br />
<span style="color: #0000FF; ">ORDER</span>&nbsp;<span style="color: #0000FF; ">BY</span>&nbsp;$PARTITION.Fun_User_Id(Id);</div>
<div style="margin: 5px 0px; font-size: 12px !important;"></div>
<br />
<div id="cnblogs_post_body" style="margin-bottom: 20px; word-break: break-word; color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; ">
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; margin-left: 21pt; text-indent: -21pt;"><strong><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">三、</span></strong><strong><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">后记</span></strong></p>
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; text-indent: 21pt;"><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">在MSND的</span><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;"><a href="http://msdn.microsoft.com/zh-cn/library/ms345146(SQL.90).aspx" style="outline: none; text-decoration: none; color: #3d81ee; border-bottom-width: 1px; border-bottom-style: dashed;">SQL Server 2005&nbsp;<span style="line-height: 1.8;">中的分区表和索引</span></a></span><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">中同样提供了一个脚本用于生成表分区，和他不同的是：他采用了表来保存文件路径，再使用游标来创建文件而已，其实这只能生成一部分代码，而我的脚本不同之处就是能最大限度的生成常规表分区的常用代码，方便快捷很多。有兴趣的童鞋可以下载：<a href="http://download.microsoft.com/download/a/b/4/ab490b9f-7ad5-45ef-9f03-428e24076776/SQL2005PartitioningScripts.exe" style="outline: none; text-decoration: none; color: #3d81ee; border-bottom-width: 1px; border-bottom-style: dashed;">SQL2005PartitioningScripts.exe</a></span></p>
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; text-indent: 21pt;"><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">上面使用表保存信息的这种想法在后期的数据搬迁（比如需要对一个现有的表进行表分区，这种情况下通常会先建一个分区表，再进行导入现有表的数据）中是有很大的用处的，后面的文章中会讲讲如何进行自动化的数据搬迁，敬请留意。</span></p>
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px;">&nbsp;</p>
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px; margin-left: 21pt; text-indent: -21pt;"><strong><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">四、</span></strong><strong><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;">参考文献</span></strong></p>
<p style="line-height: 1.8; margin-top: 10px; margin-bottom: 10px;"><span style="line-height: 1.8; font-family: 微软雅黑, sans-serif;"><a href="http://msdn.microsoft.com/zh-cn/library/ms345146(SQL.90).aspx" style="outline: none; text-decoration: none; color: #3d81ee; border-bottom-width: 1px; border-bottom-style: dashed;"><span style="outline-color: initial; outline-width: initial; border-bottom-width: 1px; border-bottom-style: dashed;">SQL Server 2005</span>&nbsp;<span style="outline: none; border-bottom-width: 1px; border-bottom-style: dashed; line-height: 1.8;">中的分区表和索引</span></a></span></p>
<div></div>
</div>
<div id="MySignature" style="color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; "></div>
<div style="clear: both; color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; "></div>
<div id="blog_post_info_block" style="margin-top: 20px; color: #333333; font-family: 微软雅黑, Georgia, &quot;Times New Roman&quot;, Times, sans-serif; ">
<div id="blog_post_info"></div>
</div>
<img src ="http://www.cppblog.com/tx7do/aggbug/214683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2017-02-16 11:17 <a href="http://www.cppblog.com/tx7do/archive/2017/02/16/214683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>