linux并发网络编程相关
文章平均质量分 86
李生龙
这个作者很懒,什么都没留下…
展开
-
在 OpenResty 里实现进程间通讯
在 Nginx 里面,每个 worker 进程都是平等的。但是有些时候,我们需要给它们分配不同的角色,这时候就需要实现进程间通讯的功能。轮询一种简单粗暴但却被普遍使用的方案,就是每个进程划分属于自己的 list 类型的 shdict key,每隔一段时间查看是否有新消息。这种方式优点在于实现简单,缺点在于难以保证实时性。当然对于绝大多数需要进程间通讯的场景,每 0.1 起一个 timer 来处理新增消息已经足够了。毕竟 0.1 秒的延迟不算长,每秒起 10 个 timer 开销也不大,应付一般的通信原创 2021-11-29 17:50:03 · 593 阅读 · 0 评论 -
Linux网络编程
(一)Linux网络编程--网络知识介绍Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一 个地方获取文件的时候,是转载 2013-03-01 10:21:48 · 352 阅读 · 0 评论 -
linux select阻塞非阻塞的使用
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式转载 2013-10-08 10:40:27 · 6954 阅读 · 1 评论 -
网络编程示例之八:Timing wheel 踢掉空闲连接
Muduo 网络编程示例之八:Timing wheel 踢掉空闲连接陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice t.sina.com.cn/giantchen这是《Muduo 网络编程示例》系列的第八篇文章,原计划讲文件传输,这里插入一点计划之外的内容。Muduo 全系列文章列表: http://blog.csdn.转载 2013-09-25 20:20:05 · 1405 阅读 · 0 评论 -
setsockopt getsockopt 对网络设置的使用
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt (s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2.如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经转载 2013-09-27 13:25:53 · 801 阅读 · 0 评论 -
linux 库函数大全
linux 库函数大全 2010-06-01 16:52:34| 分类: UNIX编程|举报|字号 订阅第2章数据转换函数ecvt(将浮点型数转换成字符串,19取四舍五入)fcvt(将浮点型数转换为字符串,20取四舍五入)gcvt(将浮点型数转换为字符串,21取四舍五入)第3章内存配置函数alloca(配置内存空间)brk(改变数据字节的转载 2014-05-16 13:46:51 · 1047 阅读 · 0 评论 -
Poco C++库介绍
Poco C++库是:一系列C++类库,类似Java类库,.Net框架,Apple的Cocoa;侧重于互联网时代的网络应用程序使用高效的,现代的标准ANSI/ISO C++,并基于STL高可移值性,并可在多个平台下可用开源,并使用Boost Software License发布不管是否商用,都完全免费Poco库概览 特原创 2014-05-31 15:43:33 · 1240 阅读 · 0 评论 -
Poco vs Boost
POCO的优点: 1) 比boost更好的线程库,特别是一个活动的方法的实现,并且还可设置线程的优先级。 2) 比 boost:asio更全面的网络库。但是boost:asio也是一个非常好的网络库。 3) 包含了一些Boost所不包含的功能,像XML,数据库接口等。 4) 跟Boost相比,集成度更高,是更加统一的一个库。 5) Poco的c++代码更清洁,现代和易理解。对不原创 2014-06-06 14:10:38 · 901 阅读 · 0 评论 -
POCO库 Foundation::Thread模块(二) 主动对象
Poco为使用者提供了一套基于多线程的主动对象,它通过使用多线程来高效地完成任务,而对于调用者却屏蔽了多线程的种种顾虑。甚至都看不出它使用了多线程的痕迹。Poco中一共有三种主动对象:activity,acitivityMethod,Activity对象 Acitvity对象是主动对象中最简单的一种对象,它通过对象调用的方式实现通过多线程完成任务,并且要求入口函数是没有参数和返原创 2014-06-06 14:13:11 · 1096 阅读 · 0 评论 -
基于 POCO 框架的 TCP 连接分流程序
介绍下面的程序实现了对 TCP 连接的分流,即将一个 TCP 连接的流量分布到多个 TCP 连接上进行传输。本程序的主要作用是在特定网络环境下提升通过 TCP 连接的 OpenVPN 服务的速率,使之充分利用带宽。程序的主要复杂之处在于单生产者—多消费者、多生产者—单消费者两种同步方式的实现。代码 [Cpp] view plaincopy转载 2014-06-06 14:01:25 · 2381 阅读 · 0 评论 -
POCO库 Foundation::SharedLibrary模块分析
Foundation中的SharedLibrary实现跨平台的dll动态加载。 具体使用方法和简介可见:ShareLibrary官方文档SharedLibrary导出函数SharedLibrary类的简单用法 通过SharedLibrary可以实现函数导出和类导出,函数导出是最简单的,Dl转载 2014-06-06 14:04:59 · 956 阅读 · 0 评论 -
SOCI、LiteSQL、POCO数据库访问类库对比
最近在做视频的开发,其中视频的设备接入管理服务器、流媒体管理服务器、中心服务器都涉及到了数据库的操作,同时需要兼容大多数版本的数据库,包括mysql、sqlite、oracle。公司原来使用的是ado来进行数据库的开发的, 但是考虑到目前需要兼容linux,目前使用Poco框架封装的数据库模块进行开发。根据项目情况我对soci、litesql、poco这三个框架进行了简单的学习转载 2014-06-06 14:11:40 · 1079 阅读 · 0 评论 -
Linux文件操作学习总结
文件类型:普通文件(文本文件,二进制文件)、目录文件、链接文件、设备文件、管道文件。 文件的权限:读、写、执行 文件的相关信息:目录结构、索引节点、文件数据索引节点的stat结构struct stat{dev_t st_dev;//文件使用的设备号ino_t st_inl;//索引节点号mode_t st_mode;//文件访问权限nlink_t s转载 2014-05-28 11:48:18 · 642 阅读 · 0 评论 -
linux提供了select、poll、epoll接口来实现IO复用,三者的原型如下所示,本文从参数、实现、性能等方面对三者进行对比。
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);int poll(struct pollfd *fds, nfds_t nfds, int timeout);int epoll_wait(int epfd, struct epoll转载 2014-06-17 18:39:20 · 674 阅读 · 0 评论 -
EPOLL事件有两种模型
EPOLL事件有两种模型:Edge Triggered (ET)Level Triggered (LT)假如有这样一个例子:1. 我们已经把一个用来从管道中读取数据的文件句柄(RFD)添加到epoll描述符2. 这个时候从管道的另一端被写入了2KB的数据3. 调用epoll_wait(2),并且它会返回RFD,说明它已经准备好读取操作4. 然后我们读取了1KB的数据原创 2014-06-17 19:15:53 · 648 阅读 · 0 评论 -
网络库总结
开源C/C++网络库比较http://blog.csdn.net/langeldep/article/details/6976120在开源的C/C++网络库中,常用的就那么几个,在业界知名度最高的,应该是ACE了,不过是个重量级的大家伙,轻量级的有libevent, libev,还有 Boost的ASIO。ACEhttp://www.cs.wustl.edu/~schmid转载 2014-06-18 10:22:39 · 766 阅读 · 0 评论 -
libevent+多线程的服务器模型
最近在看memcached的源码,觉得它那种libevent+多线程的服务器模型真的很不错,我将这个模型封装成一个C++类,根据我的简单测试,这个模型的效率真的很不错,欢迎大家试用。这个类的使用方法很简单(缺点是不太灵活),只要派生一个类,根据需要重写以下这几个虚函数就行了://新建连接成功后,会调用该函数virtual void ConnectionEvent(Conn *conn转载 2014-06-18 13:42:46 · 2090 阅读 · 0 评论 -
搭建POCO-1.4.6p2+VS2008开发环境
一、安装1、下载安装Microsoft Visual Studio 20082、下载安装POCO C++ Liberary,下载地址:http://pocoproject.org/download/;3、环境变量中添加%POCO_HOME%=D:/poco-1.4.6p24、解压poco-1.4.6p2.zip到%POCO_HOME%5、编译:a 编转载 2014-06-20 10:06:00 · 1438 阅读 · 0 评论 -
libevent源码框架
原创 2014-06-22 13:42:04 · 622 阅读 · 0 评论 -
Centos下安装Log4cxx
Log4cxx是开放源代码项目Apache Logging Service的子项目之一,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。要使用log4cxx,首先要从官网下载,官网是http://logging.apache.org/log4cxx/index.html,目前的最新版本是0.10.0,下载地址:http://www.apache.org/dyn/closer.cg转载 2014-08-19 19:52:12 · 2054 阅读 · 0 评论 -
Centos6.4下安装Boost1.51
1、下载boost_1_51_0.tar.gz tar -zxvf boost_1_51_0.tar.gz 2、然后进入解压缩后的文件夹编译boost的编译器jamcd boost_1_51_0\tools\jam./build_dist.sh 3、编译完后在这个目录下有编译出的bjam文件boost_1_51_0\tools\jam\stag转载 2014-08-19 19:52:52 · 825 阅读 · 0 评论 -
c++网络库调研
C++ 网络库 Network Library TCP Server网络库总结开源C/C++网络库比较http://blog.csdn.net/langeldep/article/details/6976120在开源的C/C++网络库中,常用的就那么几个,在业界知名度最高的,应该是ACE了,不过是个重量级的大家伙,轻量级的有libevent, libev,还有 Bo原创 2014-08-28 14:06:14 · 683 阅读 · 0 评论 -
7种网络编程I/O模型代码实现实例
部分代码参考《[WINDOWS网络与通信程序设计].王艳平》,网络中一些I/O模型的代码都没有对socket是否可写做过深入研究,我这边会提供一些解决方法。阻塞模式下,send会发生阻塞(非阻塞模式下send返回WSAEWOULDBLOCK错误,重叠I/O下表现为投递的发送请求一直无法完成)的情况一般可以分为3种 : 1, 服务器虽然发送了大量数据,但客户端并未调用recv函数去转载 2014-08-29 13:41:37 · 695 阅读 · 0 评论 -
多线程与并发服务器设计(23 - 2 )
异步I/O常见并发服务器方案Linux能同时启动多少个线程? 对于 32-bit Linux,一个进程的地址空间是 4G,其中用户态能访问 3G 左右,而一个线程的默认栈 (stack) 大小是 10M,心算可知,一个进程大约最多能同时启动 300 个线程左右。多线程能提高并发度吗? 如果指的是转载 2014-08-29 11:23:36 · 692 阅读 · 0 评论 -
muduo_net库源码分析
Channel是selectable IO channel,负责注册与响应IO 事件,它不拥有file descriptor。Channel是Acceptor、Connector、EventLoop、TimerQueue、TcpConnection的成员,生命期由后者控制。时序图EventL转载 2014-08-29 11:19:50 · 611 阅读 · 0 评论 -
memcached
这次的Memcached源码分享总共写了20篇文章,主要是记录自己看源码的一个过程,因为我们大脑不靠谱。在看源码过程中,已有的一些文章帮助很大,在学习了很多人的文章之后,自己分析源码,过程才没那么痛苦,下面就把我认为好的文章分享出来,这些文章涵盖了Memcached的各个方面,大家在学习Memcached的过程中可以参考。Facebook对memcached的提升Memcached转载 2014-08-29 12:10:49 · 507 阅读 · 0 评论 -
linux最大线程数实验
ubuntu10.01服务器版本,建立线程池。最大线程数竟然只有不到400。然后就报memory不够。没有这么夸张吧。于是google。发现发面这文章。解释的挺不错,转来慢慢品一下。查看最大线程数:cat /proc/sys/kernel/threads-maxulimitUser limits - limit the use of system-wide re转载 2014-08-29 18:57:43 · 1204 阅读 · 0 评论 -
杨建:网站加速--服务器编写篇(上)
转自 http://blog.sina.com.cn/s/blog_466c66400100bi2n.html--提升性能的同时为你节约10倍以上成本From: http://blog.sina.com.cn/iyangjian一,如何节约CPU二,怎样使用内存三,减少磁盘I/O四,优化你的网卡五,调整内核参数六,衡量Web Server的性能指标转载 2014-09-03 15:19:47 · 887 阅读 · 0 评论 -
网站加速--服务器编写篇 (下)
--提升性能的同时为你节约10倍以上成本From: http://blog.sina.com.cn/iyangjian七,NBA js直播的发展历程这一节就谈下这个项目发展过程中所遇到的瓶颈,以及如何解决的。应该是06年吧,当时NBA 比赛比较火,woocall负责高速模式图文直播放,普通模式和动态比分数据等都放在一群破服务器上,大概有十几20台,这些破服务器有些扛不住转载 2014-09-03 15:18:14 · 522 阅读 · 0 评论 -
多线程服务器编程模型
本文主要讲我个人在多线程开发方面的一些粗浅经验。总结了一两种常用的线程模型,归纳了进程间通讯与线程同步的最佳实践,以期用简单规范的方式开发多线程程序。文中的“多线程服务器”是指运行在 Linux 操作系统上的独占式网络应用程序。硬件平台为 Intel x64 系列的多核 CPU,单路或双路 SMP 服务器(每台机器一共拥有四个核或八个核,十几 GB 内存),机器之间用百兆或千兆以太网连接。转载 2014-11-27 14:31:31 · 900 阅读 · 0 评论 -
多线程与并发服务器设计(23-1)
常见并发服务器方案1、循环式/迭代式( iterative )服务器 无法充分利用多核CPU,不适合执行时间较长的服务2、并发式(concurrent)服务器one connection per process/one connection per thread 适合执行时间比较长的服务3、prefork or pre threaded(UNP2e 第27章转载 2014-08-29 11:20:24 · 883 阅读 · 0 评论 -
大型网站的负载均衡器、db proxy和db
本文主要分析网站后台架构中的负载均衡器,企业常用的硬件负载均衡器软件负载均衡器、数据库代理服务器和数据库。1.1 负载均衡在大型网站部署中,负载均衡至少有三层部署。第一层为web server或者缓存代理之上的负载均衡,第二层为数据库之上的负载均衡,第三层为存储设备之上的负载均衡。在第一层部署中,最常使用的是硬件负载均衡器有F5 BIG-IP、Citrix NetScale转载 2014-11-27 14:33:40 · 655 阅读 · 0 评论 -
c++迭代器
1. 迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型。(1) 每种容器类型都定义了自己的迭代器类型,如vector:vector::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是由vector定义的iterator类型。(2) 使用迭代器读取vector中的每一个元素:vector ivec(10,1);for(vector原创 2015-01-02 23:51:33 · 474 阅读 · 0 评论 -
gsoap:实现线程池处理时获取到客户端的ip
问题:在使用线程池处理客户端请求时发现不能获取到客户端的ip!原因: 由于在server_loop注循环中只把连接字sock加到queue队列中,并没有客户端IP,所以每一次queue回调函数只能取得sock连接字,没有客户端的ip解决方法: 在将sock加入queue队列的同时把ip也加入到ips队列中,ips队列的长度和queue相同,而且存的数据下标要原创 2015-01-24 14:49:12 · 871 阅读 · 0 评论 -
ACE+gSOAP实现高性能WebService Server
ACE+gSOAP实现高性能WebService Server(C/C++)2013-10-12 16:10 160人阅读 评论(0) 收藏 举报1、开发环境请参考《搭建ACE-5.7.4+VS2008开发环境》一文 2、gSOAP库,下载地址:http://gsoap2.sourceforge.net/,本文使用的版本是:gsoap_2.7.15,gSOA转载 2015-03-27 18:17:23 · 1705 阅读 · 0 评论 -
函数可重入性及编写规范
一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。转载 2015-03-22 17:12:20 · 520 阅读 · 0 评论 -
IBM文章使用 Boost 的 IPC 和 MPI 库进行并发编程
Boost C++ 库让并发编程变得既简单又有趣。学习如何使用两个 Boost 库 —— Interprocess (IPC) 库和 Message Passing Interface (MPI) 实现共享内存对象、同步文件锁和分布式通信等功能。http://www.ibm.com/developerworks/cn/views/aix/libraryview.jsp转载 2015-04-22 22:44:00 · 784 阅读 · 0 评论 -
multiple reactors(35 -1 )
http://blog.csdn.net/laohan_/article/details/14309341 muduo库如何支持多线程EventLoopThread(IO线程类)EventLoopThreadPool(IO线程池类)IO线程池的功能是开启若干个IO线程,并让这些IO线程处于事件循环的状态转载 2015-03-27 19:41:08 · 421 阅读 · 0 评论 -
Poco::TCPServer框架解析
Poco::TCPServer框架解析POCO C++ Libraries提供一套 C++ 的类库用以开发基于网络的可移植的应用程序,功能涉及线程、文件、流,网络协议包括:HTTP、FTP、SMTP 等,还提供 XML 的解析和 SQL 数据库的访问接口。不仅给我的工作带来极大的便利,而且设计巧妙,代码易读,注释丰富,也是非常好的学习材料,我个人非常喜欢。POCO的创始人在这个开源项目的基础上转载 2015-04-21 09:41:39 · 812 阅读 · 0 评论 -
boost库asio详解3——io_service作为work pool
无论如何使用,都能感觉到使用boost.asio实现服务器,不仅是一件非常轻松的事,而且代码很漂亮,逻辑也相当清晰,这点上很不同于ACE。使用io_service作为处理工作的work pool,可以看到,就是通过io_service.post投递一个Handler到io_service的队列,Handler在这个io_service.run内部得到执行,有可能你会发现,io_services转载 2015-04-21 09:46:50 · 569 阅读 · 0 评论