后台
kph_Hajash
三年服务端(直播推拉流)经验、三年客户端(网络库基础组件)经验
展开
-
使用 logrotate 切割服务日志
后端开发常遇到的一个问题是,服务产生的日志文件过大,在使用日志文件排查问题时,如果文件过大,会降低排查问题的效率;而且不对文件进行切割,就没法单独的压缩较久远的日志,浪费磁盘空间下面介绍 linux 下常用的日志切割工具 logrotate 的使用。linux 系统默认安装了 logrotate,通常由 cron 程序定时执行,执行周期是一天;可以查看 cron 的执行日志来确认 logr...原创 2020-02-13 12:47:48 · 491 阅读 · 0 评论 -
控制 nginx 启停的两种方式以及二进制 nginx 文件升级介绍
nginx 启动时会启动一个主进程,和一个或多个工作进程,前者主要是读取并检查配置文件的合法性;后者则处理实际的请求。控制 nginx 有两种方式,一种是用 kill 发送信号到 nginx 的主进程(即 nginx.pid 中保存的进程号);另一种则是使用 nginx -s signal;1. 方式一:kill -s signal PID主进程和工作进程都可以接收 kill 发送的信号,区...原创 2020-02-08 16:37:11 · 968 阅读 · 0 评论 -
Cronet 库编译指南
文章目录1、获取源码2、编译3、生成的文件4、错误记录参考链接Cronet 库是谷歌开发的移动端网络库。支持 HTTP、HTTP/2 以及 QUIC 协议。支持 Android 和 iOS 平台。其编译工具是 gn 和 ninja,类似于 cmake 与 make 的关系。下面介绍 Cronet 库的编译及编译注意事项。1、获取源码iOS 的必须在 mac 下编译,Android 必须要...原创 2019-06-18 13:36:03 · 4283 阅读 · 0 评论 -
quic服务端加密握手相关类调用关系图
jpg 及 svg 资源下载链接:https://pan.baidu.com/s/1Z2_gXlTDVe8fMIoNFVxXMg提取码:obo5原创 2019-03-20 18:31:29 · 688 阅读 · 4 评论 -
UNIX 环境高级编程之系统限制值的获取
1. 前言无论是哪种系统,可用的资源是有限的,这里的资源包括很多,比如路径长度、文件名长度、可打开文件数、最大子进程数等。那么我们在开发程序时如何获取到这些限制值以提高程序的可移植性?下面介绍 UNIX 环境下这些值的获取。2. 介绍系统限制值分为两类:编译时限制值ISO C 标准的编译时限制值全部在头文件 <limits.h> 中,包括整数最大、最小值等,POSIX.1...原创 2019-01-13 13:30:24 · 228 阅读 · 0 评论 -
UNIX 环境高级编程之出错处理
在 UNIX 系统中,系统调用出错通常会设置变量 errno 的值,以指示出错的具体类型,一般为负值,这些值通常对应一个描述性信息,可以通过 strerror( errno) 获取或者通过 perror 将错误信息输出到标准错误。在支持线程的系统环境中,同一进程的不同线程有各自的 errno,因此不用考虑它的一致性问题。errno 的使用需要注意两条规则:如果没有系统调用出错,那么 err...原创 2019-01-06 21:01:39 · 239 阅读 · 0 评论 -
UNIX 环境高级编程之带缓冲 I/O 与不带缓冲 I/O 的区别
1、I/OI/O 操作可根据是否带缓冲区来分类为带缓冲的 I/O 和不带缓冲区的 I/O ,后者就是标准 I/O。那么这两者有啥区别呢?不带缓冲其实就是应用程序直接使用系统调用。标准 I/O 是在系统调用上做了一层封装,替用户做了相关优化操作,从而减少应用程序的系统调用次数,从而达到一定的性能优化。比如需要写 100 字节数据到磁盘文件。内核的缓冲大小为 100 字节,假设用户不知道内...原创 2019-01-06 20:31:38 · 413 阅读 · 1 评论 -
简要梳理后端开发计算机知识的框架、关联性
1、前言工作中,程序开发跟在学校可是天壤之别,在公司写的程序如果带着潜在问题上线,一旦出问题,损失是不可估量的。那么,写好一个服务端程序,需要具备哪些基石呢:耐心、勤劳、专业能力强。前两个太空泛,靠各自发挥了。本文聚焦在专业储备方面的简单总结,也是为自己的开发心得做一个梳理,结构如下:数据结构算法系统环境通信协议开发语言编译、部署代码管理、测试2、数据结构一个服务端程序...原创 2018-12-21 21:13:30 · 916 阅读 · 0 评论 -
网络通信中 TCP 产生 RST 的三个条件分析
RST 是 TCP 发生错误时发送的一种 TCP 分节( segment:传输层的 PDU ),可用来异常的关闭一个连接,此时客户端会返回一个 ECONNREFUSED 错误。 它会在以下三种情况下产生:目的地为某个端口的 SYN 到达服务器,但并没有服务器在该端口监听。TCP 想取消一个已有连接,即异常地关闭连接。TCP 接收到一个根本不存在的连接上的分节。第一种情况可能有如下...原创 2018-06-16 17:43:41 · 5684 阅读 · 0 评论 -
网络信息的完整性保障算法 MD5 和 SHA
大多数协议比如 TCP、UDP、IP 等都通过帧校验序列来判断协议数据单元在传输中是否出现比特错误,在安全性的考量中,还需要做到信息的完整性保障,即不被篡改,同时也要防止偶发的比特位错误,这一实现需要借助到加密散列函数。 加密散列函数一般以需要传输的数据(消息)M 作为输入,然后输出 H 序列,H 也被称为这条消息的摘要或指纹 H(M)。H 具备如下特征:原像不可计算性:在给定某条消息的 ...原创 2018-06-09 14:59:43 · 1364 阅读 · 0 评论 -
DNS 劫持及解决方案之 HTTPDNS
1. 为什么会有 DNSDNS 即域名系统(Domain Name Server),其主要用于将域名解析为对应的 IP 地址。 那么为什么会有域名到 IP 地址的解析这一需要呢?就需要从人的角度和计算机的角度去分析了。人的角度:网络上的主机一般是通过 IP 地址唯一确定,但 IP 不便于人们记忆,如果每个人都需要通过 IP 来访问其他主机,那记忆量太大了,因此才借用域名来间接地标识一台...原创 2018-06-07 21:09:15 · 8148 阅读 · 1 评论 -
套接字地址结构为什么分 IPv4 IPv6 通用三种?
在套接字编程中, 一个网络连接的两端是通过套接字标识的, 而套接字的内容包括通信两端主机的 IP 地址和端口号、协议族等填充。比如 IPv4 的套接字地址结构:struct sockaddr_in{ uint8_t sin_len; // length of structure sa_family_t sin_family; // AF_INET in_po...原创 2018-06-13 22:23:11 · 1418 阅读 · 0 评论 -
网络编程中为什么使用“值-结果”参数
首先了解什么是“值-结果”参数,假设有如下代码struct sockaddr_un cli;int len;len = sizeof(cli);// unixfd 和 SA 在此不需要注意getpeername(unixfd, (SA *)&cli, &len); getpeername 声明:int sockfd, struct sockaddr *addr...原创 2018-06-13 15:35:32 · 1376 阅读 · 2 评论 -
网络字节序与主机字节序及相关函数
为了弄明白这个字节序的区分,我们首先需要知道为什么会有这两种字节序。 根本原因在于多字节数据的存储方式,即大小端问题。假设有一个四字节的 int 对象 :int A = (01020304)0X(01020304)0X(01020304)_{0X},其存储的起始地址为 0X100; 有些机器采用大端(Big-Endian)方式: 另一些则采用小端(Little-Endian)方式: ...原创 2018-06-11 14:15:40 · 405 阅读 · 1 评论