高性能服务器编程原理

原创 2018年04月17日 11:19:06

第一部分 Socket编程

Socket编程主要的原理是,通过socket系统调用,监听http/https请求。

主要的api有socket, bind, listen, accept, recv.

1. socket(int domain, int type, int protocol)

通过系统调用建立通信端口,domain 指定协议类型,PF_INET/AF_INET Ipv4网络协议 

type 数据流控制协议,如tcp

protocol 协议编号 如 IPPROTO_TCP

2.bind(int socket, struct  sockaddr *addr, int addrlen)

将通信端口与地址和端口绑定,地址可以为某一个网卡地址,也可绑定到本机的所有网卡上INADDR_ANY(0.0.0.0)。

addrlen addr结构体的长度

3.listen(int socket , int backlog) 指定socket通信的模式。

只适用SOCK_STREAM或SOCK_SEQPACKET的socket类型。backlog最大连接数上限。

4.accept(int socket, struct sockaddr *clientaddr, int clientaddrlen)

等待接收客户端连接连接,返回一个新的socket。clientaddr 请求发起方的地址。

5.recv(int socket, void *buffer, int buffersize, unsigned int flags)

将客户端发送到socket中的数据读到buffer中。flags 指定读取数据时的处理方式。

6.int send(int s, const void *msg, int len, unsigned int flags)将数据由指定的socket 传给对方主机。参数s为已建立好连接的socket。

第二部分 I/O复用

通过accept 接收到client的请求后,读取请求的数据做相应的处理,此时其他的链接需要等待。为了提高响应效率,需要在收到client的请求后,把请求处理的工作交给其他进程去处理,主进程继续响应后续的请求。以kqueue模型进行说明。

1.kqueue() 创建一个队里

2.struct event 结构体

不同的描述符类型,相应的filter类型不同。

ident 描述符

filter 描述符上的事件 

flags事件处理动作 add/delete

fflags 和描述符有关

3.ENV_SET 初始化事件的宏

4.kevent($k, struct event *changeEventList,  nchangeEventList,  struct event *firedEventList,  nfiredEventList, struct timestemp *time)

第三部分 Socket与I/O复用结合

先创建一个socket,将socket放入kq,当有链接到达时,kevent会获得一个触发的事件,在这个事件中有socket的描述符,通过accept方法,用新的socket去接管这个请求,并把新socket也放入kq中,由在新socket处理用户请求的时候,主socket可以同时接收新请求。

TCP 监听 socket,如果在完成的连接队列 ( 已收三次握手最后一个 ACK) 中有数据,此事件将被通知。收到该通知的应用一般调用 accept(),且可通过 data 获得完成队列的节点个数。 流或数据报 socket,当协议栈的 socket 层接收缓冲区有数据时,该事件会被通知,并且 data 被设置成可读数据的字节数。

高性能缓存Memcached服务深度原理及实战

-
  • 1970年01月01日 08:00

Linux高性能服务器编程清晰PDF+源码

  • 2017年11月16日 20:38
  • 31.8MB
  • 下载

《linux高性能服务器编程》学习笔记(一)

一。tcp/ip协议族 四层协议系统: 应用层:ping telnet OSPF DNS(用户空间) 传输层:TCP UDP SCTP(流控制传输协议) 网络层:ICM...
  • kidck
  • kidck
  • 2016-04-13 21:00:36
  • 2515

Linux高性能服务器编程高清PDF(带书签)+源码

  • 2017年11月16日 21:58
  • 31.82MB
  • 下载

《linux高性能服务器编程》读书笔记

linux高性能服务器编程 从高到底的协议有: 应用层:ping(使用ICMP)、telnet(使用tcp)、OSPF(使用IP)、DNS(使用UDP) 传输层:TCP、UDP 网络层:ICMP、...
  • NB_vol_1
  • NB_vol_1
  • 2015-11-06 14:44:53
  • 1998

Linux高性能服务器编程(完整书签)

  • 2017年09月23日 10:36
  • 32.43MB
  • 下载

linux高性能服务器编程源码

  • 2017年11月06日 10:00
  • 79KB
  • 下载

第二篇 深入解析高性能服务器编程 第5章 Linux 网络编程基础API

5.1socket地址API 5.2创建socket 5.3命名socket 5.4监听socket 5.5接受连接 5.6发起连接 5.7关闭连接 5.8数据读写 5.8.1 TCP数据读写 5.8...
  • qq_25773973
  • qq_25773973
  • 2016-09-21 17:18:05
  • 218

Linux高性能服务器编程——多线程编程(上)

多线程编程 Linux线程概述 线程模型         线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。根据运行环境和调度者的身份,线程可分为内核线程和用户线程。内核线程,在有的系统...
  • walkerkalr
  • walkerkalr
  • 2014-07-06 22:22:22
  • 1557

服务器编程——高性能服务器程序框架

高性能服务器程序框架
  • Linux_ever
  • Linux_ever
  • 2016-02-23 17:44:48
  • 582
收藏助手
不良信息举报
您举报文章:高性能服务器编程原理
举报原因:
原因补充:

(最多只允许输入30个字)