<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>部署 on 鹿鸣青野的blog</title><link>https://www.sylgalaxy.xyz/tags/%E9%83%A8%E7%BD%B2/</link><description>Recent content in 部署 on 鹿鸣青野的blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 25 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.sylgalaxy.xyz/tags/%E9%83%A8%E7%BD%B2/index.xml" rel="self" type="application/rss+xml"/><item><title>C++ 服务部署实战：从源码到公网访问</title><link>https://www.sylgalaxy.xyz/posts/cpp-http-server-deploy/</link><pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.sylgalaxy.xyz/posts/cpp-http-server-deploy/</guid><description>&lt;blockquote&gt;
&lt;p&gt;在一台 2C2G 的云服务器上实测：单文件 HTTP 服务器，&lt;code&gt;g++&lt;/code&gt; 编译，监听 8080 端口，从编译到公网访问全流程跑通。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="1-socket-七步流程"&gt;1. socket 七步流程&lt;/h2&gt;
&lt;p&gt;示例是一个约 60 行的单文件程序 &lt;code&gt;http_server.cpp&lt;/code&gt;，纯 Linux socket API、零第三方依赖，放在你自己的项目目录里即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;socket() → bind() → listen() → accept() → recv() → send() → close()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 建电话 插网线 开机待命 接电话 听需求 答复 挂断
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;步骤&lt;/th&gt;
&lt;th&gt;调用&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;socket(AF_INET, SOCK_STREAM, 0)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;IPv4 + TCP，返回文件描述符（Linux 一切皆文件）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bind(fd, &amp;amp;addr, sizeof)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;绑定地址；&lt;code&gt;INADDR_ANY&lt;/code&gt;（0.0.0.0）= 监听所有网卡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;listen(fd, 16)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;开始待命；16 是 backlog 等待队列长度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;accept(fd, ...)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;阻塞等客户端，返回新 fd（每客户一个）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;code&gt;recv(fd, buf, n, 0)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;读 HTTP 请求报文（原始文本）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;code&gt;send(fd, resp, len, 0)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;回 HTTP 响应&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;code&gt;close(fd)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;挂断，回 while 等下一客&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;要点：&lt;/p&gt;</description></item></channel></rss>