-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
180 lines (108 loc) · 13.3 KB
/
atom.xml
File metadata and controls
180 lines (108 loc) · 13.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>defke's notes</title>
<subtitle>专业搬砖</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="https://www.defke.top/"/>
<updated>2019-06-25T13:29:02.627Z</updated>
<id>https://www.defke.top/</id>
<author>
<name>defke</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>aritle</title>
<link href="https://www.defke.top/2019/06/25/aritle-3/"/>
<id>https://www.defke.top/2019/06/25/aritle-3/</id>
<published>2019-06-25T13:29:02.000Z</published>
<updated>2019-06-25T13:29:02.627Z</updated>
<summary type="html">
</summary>
</entry>
<entry>
<title>gin结合endless实现服务平滑重启</title>
<link href="https://www.defke.top/2019/06/24/gin%E7%BB%93%E5%90%88endless%E5%AE%9E%E7%8E%B0%E6%9C%8D%E5%8A%A1%E5%B9%B3%E6%BB%91%E9%87%8D%E5%90%AF/"/>
<id>https://www.defke.top/2019/06/24/gin结合endless实现服务平滑重启/</id>
<published>2019-06-24T14:14:33.000Z</published>
<updated>2019-06-25T13:47:12.811Z</updated>
<content type="html"><![CDATA[<p>新建一个项目</p><p><img src="/2019/06/24/gin结合endless实现服务平滑重启/1561459924.jpg" alt></p><p> 用go-module进行包管理(需要go版本>=1.11.0)</p><p>打开命令行,运行如下命令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">set GO111MODULE=on//打开包管理</span><br><span class="line">set GOPROXY= https://goproxy.io//设置下载包代理</span><br></pre></td></tr></table></figure><p>运行命令,初始化项目</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">go mod init</span><br></pre></td></tr></table></figure><p>在main.go 文件导入如下包</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">import (</span><br><span class="line"> "github.com/gin-gonic/gin"</span><br><span class="line"> "github.com/fvbock/endless"</span><br><span class="line">)</span><br></pre></td></tr></table></figure><p>运行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">go mod vendor</span><br></pre></td></tr></table></figure><p>这时候,go包管理工具就会为我们下载导入的包跟需要的关联包到vendor目录下</p><p><img src="/2019/06/24/gin结合endless实现服务平滑重启/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20190625191018.png" alt></p><p>在main.go 下编写demo,代码如下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">package main</span><br><span class="line"></span><br><span class="line">import (</span><br><span class="line"> "github.com/fvbock/endless"</span><br><span class="line"> "github.com/gin-gonic/gin"</span><br><span class="line"> "log"</span><br><span class="line"> "net/http"</span><br><span class="line"> "time"</span><br><span class="line">)</span><br><span class="line"></span><br><span class="line">func handle(c *gin.Context) {</span><br><span class="line"> duration,err := time.ParseDuration(c.Query("duration"))</span><br><span class="line"> if err != nil {</span><br><span class="line"> log.Println("err:",err)</span><br><span class="line"> return</span><br><span class="line"> }</span><br><span class="line"> time.Sleep(duration)</span><br><span class="line"> c.String(http.StatusOK,"hello world")</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">func main() {</span><br><span class="line"> router := gin.Default()</span><br><span class="line"> router.GET("/sleep",handle)</span><br><span class="line"> err := endless.ListenAndServe(":8080",router)</span><br><span class="line"> if err != nil {</span><br><span class="line"> log.Println("err:",err)</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>将代码打包到linux服务器运行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">go build && nohup ./hot-upgrade-demo &</span><br></pre></td></tr></table></figure><p>现在将打印输出改成 “hello world”,重新编译</p><p><img src="/2019/06/24/gin结合endless实现服务平滑重启/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20190625205539.png" alt></p><p>在命令行使用curl请求</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl "http://localhost:8080/sleep?duration=60s"</span><br></pre></td></tr></table></figure><p>另起一个终端,在另一个终端输入如下命令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl "http://localhost:8080/sleep?duration=1s"</span><br></pre></td></tr></table></figure><p>结果:</p><p>第一个终端返回:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hello world</span><br></pre></td></tr></table></figure><p>第二个终端返回:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hello friend</span><br></pre></td></tr></table></figure><p>ps -ef 命令下的程序运行图</p><p><img src="/2019/06/24/gin结合endless实现服务平滑重启/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20190625210230.png" alt></p><p>如图所示,在关闭pid 540 的程序之后,程序会另起一个子进程,等连接断开后,关闭父进程,如图:</p><p><img src="/2019/06/24/gin结合endless实现服务平滑重启/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20190625210445.png" alt></p><p>这说明第一个请求的连接并没有关闭,用的还是原来的连接,这样就实现程序的平滑重启</p><p>注意:</p><p>程序在windows运行会报错</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"># hot-upgrade-demo/vendor/github.com/fvbock/endless</span><br><span class="line">vendor\github.com\fvbock\endless\endless.go:64:3: undefined: syscall.SIGUSR1</span><br><span class="line">vendor\github.com\fvbock\endless\endless.go:65:3: undefined: syscall.SIGUSR2</span><br><span class="line">vendor\github.com\fvbock\endless\endless.go:68:3: undefined: syscall.SIGTSTP</span><br><span class="line">vendor\github.com\fvbock\endless\endless.go:111:5: undefined: syscall.SIGUSR1</span><br><span class="line">vendor\github.com\fvbock\endless\endless.go:112:5: undefined: syscall.SIGUSR2</span><br><span class="line">vendor\github.com\fvbock\endless\endless.go:115:5: undefined: syscall.SIGTSTP</span><br><span class="line">vendor\github.com\fvbock\endless\endless.go:119:5: undefined: syscall.SIGUSR1</span><br><span class="line">vendor\github.com\fvbock\endless\endless.go:120:5: undefined: syscall.SIGUSR2</span><br><span class="line">vendor\github.com\fvbock\endless\endless.go:123:5: undefined: syscall.SIGTSTP</span><br><span class="line">vendor\github.com\fvbock\endless\endless.go:224:3: undefined: syscall.Kill</span><br><span class="line">vendor\github.com\fvbock\endless\endless.go:224:3: too many errors</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p>新建一个项目</p>
<p><img src="/2019/06/24/gin结合endless实现服务平滑重启/1561459924.jpg" alt></p>
<p> 用go-module进行包管理(需要go版本&gt;=1.11.0)</p>
<p>打开命令行
</summary>
<category term="gin学习" scheme="https://www.defke.top/categories/gin%E5%AD%A6%E4%B9%A0/"/>
<category term="运维" scheme="https://www.defke.top/tags/%E8%BF%90%E7%BB%B4/"/>
<category term="gin" scheme="https://www.defke.top/tags/gin/"/>
</entry>
<entry>
<title>aritle</title>
<link href="https://www.defke.top/2019/06/24/aritle-2/"/>
<id>https://www.defke.top/2019/06/24/aritle-2/</id>
<published>2019-06-24T12:12:58.000Z</published>
<updated>2019-06-24T12:12:59.013Z</updated>
<summary type="html">
</summary>
</entry>
<entry>
<title>aritle</title>
<link href="https://www.defke.top/2019/06/24/aritle-1/"/>
<id>https://www.defke.top/2019/06/24/aritle-1/</id>
<published>2019-06-24T12:06:35.000Z</published>
<updated>2019-06-24T12:06:35.274Z</updated>
<summary type="html">
</summary>
</entry>
<entry>
<title>文章</title>
<link href="https://www.defke.top/2019/06/23/aritle/"/>
<id>https://www.defke.top/2019/06/23/aritle/</id>
<published>2019-06-23T15:06:46.000Z</published>
<updated>2019-06-24T14:46:58.492Z</updated>
<content type="html"><![CDATA[<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=461153715&auto=1&height=66"></iframe>]]></content>
<summary type="html">
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=
</summary>
</entry>
<entry>
<title>docker容器使用</title>
<link href="https://www.defke.top/2019/06/23/docker%E5%AE%B9%E5%99%A8%E4%BD%BF%E7%94%A8/"/>
<id>https://www.defke.top/2019/06/23/docker容器使用/</id>
<published>2019-06-23T14:09:09.000Z</published>
<updated>2019-06-23T14:12:24.937Z</updated>
<summary type="html">
</summary>
</entry>
<entry>
<title>git常用命令</title>
<link href="https://www.defke.top/2019/06/23/git%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/"/>
<id>https://www.defke.top/2019/06/23/git常用命令/</id>
<published>2019-06-23T13:49:29.000Z</published>
<updated>2019-06-23T14:12:39.768Z</updated>
<summary type="html">
</summary>
</entry>
<entry>
<title>vps服务器自建梯子</title>
<link href="https://www.defke.top/2019/06/23/vps%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%87%AA%E5%BB%BA%E6%A2%AF%E5%AD%90/"/>
<id>https://www.defke.top/2019/06/23/vps服务器自建梯子/</id>
<published>2019-06-23T13:48:55.000Z</published>
<updated>2019-06-23T14:08:30.674Z</updated>
<summary type="html">
</summary>
<category term="网络" scheme="https://www.defke.top/categories/%E7%BD%91%E7%BB%9C/"/>
<category term="vps" scheme="https://www.defke.top/tags/vps/"/>
</entry>
<entry>
<title>hexo搭建自己的博客</title>
<link href="https://www.defke.top/2019/06/22/hexo%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E5%8D%9A%E5%AE%A2/"/>
<id>https://www.defke.top/2019/06/22/hexo搭建自己的博客/</id>
<published>2019-06-22T13:25:24.000Z</published>
<updated>2019-06-23T14:13:12.598Z</updated>
<content type="html"><![CDATA[<p>什么都还没写,哈哈哈哈</p>]]></content>
<summary type="html">
<p>什么都还没写,哈哈哈哈</p>
</summary>
</entry>
</feed>