穷则独善其身,达则兼济天下

工匠之路

标签 网络编程 下的文章

开源项目:manEcho(一个Linux内核函数查询工具)

背景描述由于工作原因,经常需要查询linux内核函数,对于不同版本的linux版本,部分函数还有一些差异,对于这种需求,我就动手实现了一个小工具,可以帮助我快速查询linux内核函数。工具原理工具分为两部分,客户端和服务端,客户端用于发送搜索请求,服务端用来接受用户的请求并把用户的请求转换成linux的man命令在指定版本的内核文档目录中执行,执行完毕后,把标准输出中的结果数据通过socke...
July 25, 2018

开源项目:PulseFLow 性能跟踪扩展

背景描述随着公司PHP项目体的不断增大,随着不同工程师的功能迭代,如何有效获取PHP项目的执行性能,对于系统整体模块显得异常重要,PulseFlow是一个性能跟踪扩展,它可以在程序员无感知的情况下有效跟踪每一个函数的执行效率,主要分析CPU时间消耗、内存大小消耗,这个组件除了能够快速记录每个函数体的性能信息,还具备一系列的发送机制,主要包括共享内存队列(System V 和 Posix)、U...

开源项目:基于UDP协议的日志记录系统(LogDarts)

背景介绍日志对于任何一个需要稳定运行的系统都弥足珍贵,如何构造一个高性能的统一日志平台,首先需要解决的是“记录”,如何用最快、性能损耗最小的方式来记录日志?UDP是一个不错的选择:首先UDP通道的带宽需求小,能达到很好的实时性;其次UDP不需要维持连接,在网络传输中的动作少。有人会说,UDP是不稳定传输、使用时数据风险大。对于这点,我们需要考量具体使用环境,在我们的日志系统中,每台机器都会运...

研究报告:JAVA 与 Golang 在 UDP服务器上的性能对比

背景介绍因工作需求,目前需要采用UDP协议来存储用户日志信息,目前采用了JAVA 和 Golang 两种途径。Linux内核优化(非常重要)可以使用netstat -su 查看UDP是否有错包,如果查看到有UDP receive errors,可以调整UDP缓冲区的大小以应对大规模请求,主要参数如下net.core.rmem_max=26214400 net.core.rmem_defaul...
June 8, 2018

源码阅读:C语言epoll模型

背景epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO...

网络编程:读取完整数据包的细节处理(适用于Unix domain socket)

对于TCP网络编程,读取对方数据是一个最普遍的操作,但是如何把对方的数据包完整读取到,这个看似简单的问题,需要小心处理,下面发一份公众代码,无论是书籍还是网上问答基本给出的都是这个答案。var dataBytes bytes.Buffer buf := make([]byte, 10); for { n, err := conn.Read(buf) if err != nil...