![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
socket
文章平均质量分 85
staticnetwind
这个作者很懒,什么都没留下…
展开
-
Linux下c语言快速实现web服务器
1. 前言 最近整理了整理,把之前好玩的东西翻一下,这期就到了http了。 如何快速写一个http服务器?方法当然五花八门了,python、go几行就能实现出来了,那么c\c++如何实现呢?2. 相关接口libevent内置了http相关的处理方法(之前早期版本会有一些不稳定,现在event2比较靠谱了),同时支持原创 2020-10-07 18:04:42 · 1238 阅读 · 0 评论 -
Linux下使用hiredis库与libevent实现异步接口的I/O复用
1 前言 之前的一篇文章《Linux下使用hiredis库实现优先级队列》,用的同步的接口实践; 后来遇到一个场景,同时需要处理Redis订阅的消息,又需要处理其他网络socket操作、定时器操作,当然多线程是一个思路,本文尝试从Reactive模式上解决这个问题,即用redis的异步接口,与libevent进行对接。 其实最终目的就是就是Redis接入到这篇文章编原创 2020-08-02 13:59:57 · 1723 阅读 · 0 评论 -
Linux下使用libevent实践文件零拷贝操作
1. 前言这两天又翻了翻libevent代码,发现文件操作中内部带有sendfile、mmap相关代码。又找了网上相关使用说明,资料都比较少,所以实践出真知,搞一搞。2. 介绍2.1 初探零拷贝mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系[2]。#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int原创 2020-07-18 15:27:33 · 813 阅读 · 0 评论 -
Linux下使用libevent库实现服务器端编程
TCP服务器端一般用到非阻塞Socket、IO复用,Linux可以支持epoll、select,而Windows支持select、IOCP,考虑平台适用性,需要对IO事件进行封装兼容;libevent是一个轻量级的高性能的网络库,使用libevent 进行服务器端开发非常方便,无须过多干涉网络编程的细节,不过还得真正去理解网络处理的原理;同时,evbuffer内部的缓冲处理也为上层应用提供了不少便利,能够给项目开发带来可观的效率提升;原创 2017-05-07 23:14:04 · 3522 阅读 · 0 评论 -
Linux下快速解析nf_conntrack
1. 背景回顾了项目需求是系统的统计tcp连接数;于是想到了 nf_conntrack 这个Linux内核提供的记录和跟踪连接状态的功能;然后写了个程序解析 /proc/net/nf_conntrack这个映射文件,后来悲剧就发生了,当conntrack表记录变增加到1w以上之后,解析速度急速下降,到了10w规模后,解析耗时几十秒都不能完成,,,终于后来翻到了netfilter的老巢,发现了解决方法:libnml、libnetfilter_conntrack2. 使用核心原理是通过netlink原创 2020-07-08 22:00:31 · 1935 阅读 · 0 评论 -
Linux下使用eventfd实现进程间信号量操作
1 前言起源来自于单线程epoll_wait内部处理queue的思考,后来发现了linux支持一种自定义事件的fd,查找资料之余又发现了eventfd还有多进程信号灯的用处。。。本文翻译了eventfd的用法,并在文末附带demo进行实践。新的改变ommand + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + Shif...原创 2019-09-19 00:43:01 · 1592 阅读 · 0 评论 -
Linux下使用ZMQ实践之与libevent结合
1. 前言 最近考虑到一个问题,项目中有同时处理socket、zeromq的逻辑需求,想通过libevent(I/O服用)一块将zmq-socket的事件也放一个线程中处理。 网上了解了一些实现,大部分都是通过将zmq的sockfd拿到,加入libevent_dispatch中一并处理,...原创 2019-06-27 00:59:25 · 1518 阅读 · 0 评论 -
Linux下使用ZMQ实践之监控事件
1. 前言继续《Linux下使用ZMQ实践“生产者-消费者”模型》 文章之后进一步思考:ZeroMQ通过隐藏了基础的socket操作,达到调用简明易懂的层次;那么,如果某些场景下,又需要考虑到连接状态的维护,应该如何操作?ZeroMQ给出的解决方案就是zmq_socket_monitor2. 相关知识支持监控的事件:事件描述ZMQ_EVENT_CONNECTED...原创 2019-06-26 00:09:23 · 2024 阅读 · 0 评论 -
Linux下对libevent的evbuffer模块裁剪移植
目录列表1. 背景2. 源码分析2.1 结构体分析2.2 主要接口3.裁剪3.1 兼容性定义3.2 裁剪实现3.1 chain相关操作3.2 evbuffer的操作3.3 运行测试4. 结论1. 背景libevent作为一款高效的网络开发库,内部模块也有许多优秀的实现。evbuffer为libevent的核心缓冲器功能,提供了与I/O的操作的高效结合:数据拷贝、移动、读写。上篇文章《Lin...原创 2019-06-02 17:24:53 · 407 阅读 · 0 评论 -
Linux下使用ZMQ实践“发布-订阅”模型
一、背景 继续ZMQ系列,本期我们看一下“单生产者-多消费者”的编程场景,使用ZMQ_PUB/ZMQ_SUB实践“发布-订阅”模型二、相关知识2.1 ZMQ_PUBZMQ_PUB A socket of type ZMQ_PUB is used by a publisher to distribute data. Messages sent are distributed in a ...原创 2018-06-24 13:37:50 · 3229 阅读 · 0 评论 -
Linux下使用ZMQ实践“请求-响应”异步服务器模型
一、背景 上一篇文章《Linux下使用ZMQ实践“请求-响应”服务器模型》中使用的是REP-REQ套件,该套件的特点是必须一个请求对应一个响应,如果在应用中不想使用同步处理的方式呢?ZMQ有没有提供异步处理的方法?答案是使用DEALER-ROUTER套件。 另外如何在多线程中安全传递消息的方法可以参见《Linux下使用ZMQ实践“生产者-消费者”模型》ZMQ_PULL、ZMQ_PUSH...原创 2018-03-20 00:23:09 · 1756 阅读 · 0 评论 -
Linux下使用ZMQ实践“生产者-消费者”模型
一、背景 上一篇文章《Linux下使用ZMQ实践“请求-响应”模型》引入了ZMQ的实践案例,本章继续实践编程模型中常用的“生产者-消费者”模型。二、相关知识 ZMQ_PUSH、ZMQ_PULL模型是单发单收的模型,你只能在ZMQ_PUSH套接字上进行send操作,而不能进行recv,反之一样: ZMQ_PUSH A socket of type ZMQ...原创 2018-03-17 23:02:51 · 1233 阅读 · 0 评论 -
Linux下使用ZMQ实践“请求-应答”服务模型
一、背景 在C/S编程模式中,经常需要进行进程间消息传递,常用的模式是“请求-应答”方式,客户端通过发起请求,服务端进行处理再进行回复,如果使用socket去实现,难免还要实现消息的分包、连接状态的维护的功能。 ZMQ(ZeroMQ、0MQ)则是一种高性能的异步消息库,接口风格类似于套接字实现,但又将sockfd的相关细节隐藏起来。支持线程间、进程间通信、一对多、多对一节点处理,外部的...原创 2018-03-17 21:33:06 · 1506 阅读 · 0 评论