摘要:
基于epoll的回声服务端 在TCP/IP网络编程之优于select的epoll(一)这一章中,我们介绍了epoll的相关函数,接下来给出基于epoll的回声服务端示例。 echo_epollserv.c 之前解释过关键代码,而且程序结构与select方式没有区别,故省略代码说明。 条件触发和边缘触 阅读全文
摘要:
分离I/O流 “分离I/O流”是一种常用表达,有I/O工具可以区分二者。无论使用何种办法,都可以认为分离I/O流。我们之前通过两种方法分离I/O流,第一种是TCP/IP网络编程之进程间通信中的“TCP I/O过程(Routine)分离”,这种方法通过调用fork函数复制出一个文件描述符,以区分输入和 阅读全文
摘要:
epoll的理解及应用 select复用方法由来已久,因此,利用该技术后,无论如何优化程序性能也无法同时接入上百个客户端。这种select方式并不适合以web服务端开发为主流的现代开发环境,所以要学习Linux平台下的epoll。我们先来看TCP/IP网络编程之I/O复用的echo_selectse 阅读全文
摘要:
进程间通信基本概念 进程间通信意味着两个不同进程间可以交换数据,为了完成这一点,操作系统中应提供两个进程可以同时访问的内存空间。但我们知道,进程具有完全独立的内存结构,就连通过fork函数创建的子进程也不会和父进程共享内存,因此,进程间通信只能通过其他特殊方法完成 基于管道实现进程间通信 图1-1表 阅读全文
摘要:
基于I/O复用的服务端 在前面章节的学习中,我们看到了当有新的客户端请求时,服务端进程会创建一个子进程,用于处理和客户端的连接和处理客户端的请求。这是一种并发处理客户端请求的方案,但并不是一个很好的方案,因为创建进程时需要付出很大的代价,需要大量的运算和内存空间,由于每个进程都具有独立的内存空间,所 阅读全文
摘要:
send和recv函数 在之前的学习中,我们在不少示例中用到send和recv这两个函数,但一直没有详细解释过着两个函数中每个参数的含义。本节将介绍Linux平台下的send&recv函数 sockfd:表示与数据传输对象的连接的套接字文件描述符 buf:保存待传输数据的缓冲地址值 nbytes:待 阅读全文
摘要:
多播 多播方式的数据传输是基于UDP完成的,因此,与UDP服务端/客户端的实现非常接近。区别在于,UDP数据传输以单一目标进行,而多播数据同时传递到加入(注册)特定组的大量主机。换言之,采用多播方式时,可以同时向多个主机传递数据 多播的数据传输方式及流量方面的优点: 多播服务端针对特定多播组,只发送 阅读全文
摘要:
标准I/O函数 标准标准I/O函数有两个优点: 标准I/O函数具有良好的移植性 标准I/O函数可以利用缓冲提高性能 关于移植性无需过多解释,不仅是I/O函数,所有标准函数都具有良好的移植性。因为,为了支持所有操作系统(编译器),这些函数都是按照ANSIC标准定义的。当然,这并不局限于网络编程,而是适 阅读全文
摘要:
进程概念及应用 我们知道,监听套接字会有一个等待队列,里面存放着不同客户端的连接请求,如果有一百个客户端,每个客户端的请求处理是0.5s,第一个客户端当然不会不满,但第一百个客户端就会有相当大的意见了。为了要使得所有客户端都尽可能的满意,我们应采用并发服务端,使其同时向所有发起请求的客户端提供服务。 阅读全文
摘要:
信号处理 本章接上一章TCP/IP网络编程之多进程服务端(一),在上一章中,我们介绍了进程的创建和销毁,以及如何销毁僵尸进程。前面我们讲过,waitpid是非阻塞等待子进程销毁的函数,但有一个不好的缺点就是要每隔一段时间判断子进程是否销毁,只有销毁完后才能执行父进程接下去的程序。这样显然会造成父进程 阅读全文