![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux网络编程
文章平均质量分 86
aries5555
这个作者很懒,什么都没留下…
展开
-
epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:* EAGAIN: 再试一次* EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block* perror输出: Resource temporarily unavailable转载 2012-07-14 20:00:00 · 463 阅读 · 0 评论 -
关于网络编程(服务端)的一些笔记
针对服务器处理网络连接的几种方式,unix网络编程里给出了9种方案,并且对服务器进程/线程的开销做了一个量化的比较。从个人经验出发,觉得以下几种方式是比较实用的:1.最简单的是堵塞Accept,收到连接后fork进程(unix)或创建Thread.原进程/线程继续堵塞Accept,创出来的进程线程只处理新连接上的客户请求。如果忽略创建进程/线程的开销,以及每个连接必须对应一个进程/线程的话,做原创 2012-07-28 21:33:51 · 456 阅读 · 0 评论 -
一个简单的游戏服务器框架
最近一段时间不是很忙,就写了一个自己的游戏服务器框架雏形,很多地方还不够完善,但是基本上也算是能够跑起来了。我先从上层结构说起,一直到实现细节吧,想起什么就写什么。第一部分 服务器逻辑服务器这边简单的分为三个部分,客户端的连接首先到达网关服务器,网关这里有个线程用来监听来自与客户端的连接,然后在将这些数据发送到游戏逻辑服务器上,这个逻辑游戏服务器上,数据的交互就是通过与数据服务器进行交原创 2012-07-31 17:10:53 · 478 阅读 · 0 评论 -
深入linux网络编程(三):异步阻塞IO —— epoll
1. epoll的优越性上一节介绍的select有几个缺点:存在最多监听的描述符上限FD_SETSIZE每次被唤醒时必须遍历才能知道是哪个描述符上状态ready,CPU随描述符数量线性增长描述符集需要从内核copy到用户态这几个缺点反过来正是epoll的优点,或者说epoll就是为了解决这些问题诞生的:没有最多监听的描述符上限FD_SETSIZE,只受最多文件描述符的限制,转载 2012-11-27 20:22:54 · 1007 阅读 · 0 评论 -
网络服务器后台程序开发架构
网络服务器后台程序开发几种架构包括:1.多线程模型,多线程模型即每次网络请求开启一个线程处理,这种模型瓶颈是高并发,容灾性能差。一旦某次处理挂起,将影响其他的线程的创建和运行,整个处理的并发数收到创建的线程个数限制,无法处理突发请求,存在很大不确定性。2.单线程+线程池模型。线程池具有一定的伸缩性。线程池比多线程模型要好,可以看成动态的多线程模型。网络层的线程与逻辑层的线程交互模型很重要。转载 2012-11-27 20:46:19 · 4027 阅读 · 0 评论 -
配置开发支持高并发TCP连接的Linux应用程序全攻略
2012-07-06 23:59606人阅读评论(0)收藏举报1、修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量 的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许 当前转载 2012-12-12 22:37:58 · 520 阅读 · 0 评论 -
高性能IO设计的Reactor和Proactor模式 .
在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。在比较这两个模式之前,我们首先的搞明白几个概念,什么是阻塞和非阻塞,什么是同步和异步,同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发I转载 2012-12-12 20:51:33 · 411 阅读 · 0 评论 -
使用异步 I/O 大大提高应用程序的性能(来自IBM)
AIO简介Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在 2.4 版本内核的补丁中也可以找到它。AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果I/O模型在深入介绍 AIO API 之前,转载 2012-12-12 22:49:19 · 395 阅读 · 0 评论 -
socket编程:SO_REUSEADDR
SO_REUSEADDR可以用在以下四种情况下。 (摘自《Unix网络编程》卷一,即UNPv1) 1、当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而你启动的程序的socket2要占用该地址和端口,你的程序就要用到该选项。 2、SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但每个实例绑定的IP原创 2012-07-28 20:42:06 · 519 阅读 · 0 评论 -
Linux网络编程--服务器模型
循环服务器:循环服务器在同一个时刻只可以响应一个客户端的请求 并发服务器:并发服务器在同一个时刻可以响应多个客户端的请求 9.1 循环服务器:UDP服务器 UDP循环服务器的实现非常简单:UDP服务器每次从套接字上读取一个客户端的请求,处理, 然后将结果返回给客户机. 可以用下面的算法来实现. socket(...); bind(.原创 2012-07-28 21:31:16 · 437 阅读 · 0 评论 -
关于epoll服务器示例: 监听5000个端口, 使用线程池
运行这个程序需要预先设置栈内存和文件描述符上限, 否则运行失败ulimit -n 16384ulimit -s 4096文件名:server.c编译: gcc server.c -Wall -O2 -pthread -o server程序源码如下(请自行编辑宏定义SERVER_IP为自己的IP):/*Linux 2.6 x86_64 only*/#inclu原创 2012-08-10 12:00:22 · 813 阅读 · 0 评论 -
linux之epoll2
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且转载 2012-07-17 21:41:03 · 487 阅读 · 0 评论 -
linux之epoll1
最近编写了一个IM的服务器,可是当上万级别,实现广播的时候,(TCP遍历所有的connetct)发送出去,总是出现多个数据段一起发送的现象.采用的是ruby下的Eventmachine来实现的.里面核心用到了linux下的epoll模型,所以找资料学习了下. 在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。转载 2012-07-14 20:12:40 · 722 阅读 · 0 评论 -
INADDR_ANY
其中INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。一般情况下,如果你要建立网络服务器,则你要通知服务器操作系统:请在某地址 xxx.xxx.xxx.xxx上的某端口 yyyy上进行侦听,并且把侦听到的数据包发送给我。这个过程,你是通过bind()系统调用完成的。——也就是说,你的程序要绑定服务器的某地址,或者说:把服务器转载 2012-07-21 21:28:57 · 388 阅读 · 0 评论 -
linux之epoll4
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询 的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define _转载 2012-07-21 19:23:02 · 422 阅读 · 0 评论 -
i/o多路复用
文章出处:http://www.cppblog.com/CppExplore/archive/2008/04/30/48529.html作者: CppExplore 多路复用的方式是真正实用的服务器程序,非多路复用的网络程序只能作为学习或着陪测的角色。本文说下个人接触过的多路复用函数:select/poll/epoll/port。kqueue的*nix系统没接触过,原创 2012-07-21 21:27:30 · 1269 阅读 · 0 评论 -
高性能的服务器处理框架
终于开始学习epoll了,虽然不明白的地方还是很多,但从理论到实践,相信自己动手去写一个具体的框架后,一切会清晰很多。1、首先需要一个内存池,目的在于:·减少频繁的分配和释放,提高性能的同时,还能避免内存碎片的问题;·能够存储变长的数据,不要很傻瓜地只能预分配一个最大长度;·基于SLAB算法实现内存池是一个好的思路:分配不同大小的多个块,请求时返回大于请求长度的最小块即可,对于转载 2012-07-21 14:15:34 · 623 阅读 · 0 评论 -
linux之epoll3
Linux 2.6内核中提高网络I/O性能的新方法-epoll I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。1、为什么select落后 首先,在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在 我用的2.6.15-25-386内核中,该值是1024转载 2012-07-21 19:21:41 · 661 阅读 · 0 评论 -
关于SO_LINGER 设置
TCP连接断开的时候调用closesocket函数,已经讨论过有优雅的断开和强制断开,那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性。linger结构体数据结构如下:struct linger { int l_onoff; int l_linger;};有三种组合方式:第一种 l_onoff = 0转载 2012-08-08 17:46:45 · 907 阅读 · 0 评论 -
unix网络编程-第六章-小结
I/O复用场合:1.当客户处理多个描述符(通常是交互和网络套接字)时,必须使用I/O复用。2.一个客户同时处理多个套接字是可能得。3.如果一个TCP服务器既要处理监听套接字,又要处理已连接套接字。4.如果一个服务器既要处理TCP,又要处理UDP,一般要用I/O复用。5.如果一个服务器要处理多个服务或者协议。I/O复用并非只限于网络编程,许多重要的应用程序也需要使用这项技术。转载 2013-01-25 21:58:40 · 414 阅读 · 0 评论