博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang 服务器零停机热重启原理详解
阅读量:3986 次
发布时间:2019-05-24

本文共 649 字,大约阅读时间需要 2 分钟。

关于TCP服务的实现过程

首先需要了解tcp服务器,socker机制,这些和语言无关。

一个简单的tcp server实现过程:

创建socket资源,socker1 ,是一个打开的文件描述符。
bind绑定到Hosu, Port。
开始监听listen。

经过以上过程,一个tcp服务就搭建好了。

客户端发起tcp连接请求

操作系统与其完成三次握手阶段,此连接就算建立了,操作系统根据tcp协议中的端口号标识将此连接放入指定的 backlog 队列中。

tcp server 从 backlog 队列中 accept 请求,也就是消费此队列,那么,它该从哪个 backlog 中消费呢,所以 accept 操作时需要带上自己的 socket1 。

被成功 accept 的请求才算和 tcp server 建立了连接,在此之前只是完成了三次握手。

于是 client 和 server 之间开始 read & write 。

于是,只要你得到了 socket1 ,你就可以冒充 tcp server ,也就可以 accept 客户端,并与之通讯。

关于fork子进程

我们还知道 fork 出的子进程会继承父进程的 socket 资源,于是便有了通常的操作:产生多个子进程来并行接受请求以达到提高并发能力的效果。

但是fork出的子进程是继承了父进程的上下文,和父进程用有相同的程序和代码,然而我们希望子进程加载新的程序从而实现热重启,所以fork操作显然无法满足需求。

关于exec系统调用

转载地址:http://mdaui.baihongyu.com/

你可能感兴趣的文章
自定义Viewgroup实现流式布局(3):条件换行的自定义ViewGroup
查看>>
自定义Viewgroup实现流式布局(3):实现流式布局
查看>>
React-native封装view
查看>>
React-native Alert弹出多个按钮
查看>>
Android圆形角标
查看>>
GetSafeHwnd()的调用正确时机
查看>>
coursesa课程 Python 3 programming course_2_assessment_1
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
coursesa课程 Python 3 programming 输出每一行句子的第三个单词
查看>>
coursesa课程 Python 3 programming Dictionary methods 字典的方法
查看>>
coursesa课程 Python 3 programming Accumulating Multiple Results In a Dictionary 统计文件的字母数量
查看>>
Returning a value from a function
查看>>
coursesa课程 Python 3 programming Functions can call other functions 函数调用另一个函数
查看>>
coursesa课程 Python 3 programming Tuple Assignment with Unpacking
查看>>
coursesa课程 Python 3 programming The while Statement
查看>>
course_2_assessment_6
查看>>
coursesa课程 Python 3 programming course_2_assessment_7 多参数函数练习题
查看>>
coursesa课程 Python 3 programming 排序函数sorted的可选参数
查看>>
coursesa课程 Python 3 programming course_2_assessment_8 sorted练习题
查看>>
visca接口转RS-232C接口线序
查看>>