Linux高性能网络编程

系统 2648 0

Linux高性能网络编程

Linux高性能网络编程

一、课程目标

本次课程深入讲解Linux下的socket编程,并以此为基础,着重讨论如何提高网络服务端应用的性能,通过本次课程的学习,学员将收获以下方面的成果:

  • 熟练使用socket系列函数进行网络编程;
  • 深刻理解服务端应用的性能要求;
  • 利用Linux提供的各种机制,有效地解决服务端应用的性能瓶颈。

二、参训要求

参加本次课程的学员须具备以下能力:

  • 了解TCP/IP协议,有网络编程概念。
  • 本次课程使用 C语言 教学,所以学员需拥有较好的C语言基础;
  • 能熟练使用常用的Linux命令;
  • 能熟练使用gcc、gdb、熟练撰写makefile;
  • 最好熟练使用vi、emacs等文本编辑器其中的一种。

三、课程实践环境

  • 学员自备电脑
  • 操作系统:GNU/Linux 2.6+(建议使用Redhat AS 5+或Ubuntu、Fedora)
  • 编译器:GCC v4.1+、GDB v7.0+
  • 可选IDE:Eclipse CDT

四、课程大纲

本次课程由以下几个部分构成:


1、POSIX
Thread - 多线程

  • 线程管理

     

    • 线程创建:pthread_create()
    • 线程终止:pthread_exit()
    • 线程连接和分离:join and detach
  • 线程同步机制

     

    • 互斥体:mutex
    • 读写锁:read-write lock
    • 条件变量:condition variable
  • 线程属性控制
  • mutex属性控制


2、Socket
简介

  • Socket地址数据结构:struct sockaddr,struct sockaddr_in
  • 字节序以及字节序操作:ntohl(), ntohs(), htonl(), htons()
  • Internet地址操作:inet_aton(), inet_addr(), and inet_ntoa(), inet_pton(), inet_ntop()


3、TCP
Socket

  • socket():创建socket
  • bind():绑定地址
  • listen():开始侦听
  • accept():接受来自客户端的连接
  • connect():连接到服务器
  • getsockname()和getpeername():获取本地和对端地址
  • I/O 操作:read(), write()
  • 更高效的I/O 操作:readv(), writev()
  • TCP Server编程步骤
  • TCP Server v1:迭代式Echo Server
  • TCP Server v2:多进程并发式Echo Server,使用fork()和exec*()
  • TCP Server v3:多线程并发式Echo Server,使用pthread
  • TCP Client编程步骤
  • TCP Client:Echo Client


4、UDP
Socket

  • recvfrom()和sendto():收发UDP数据报
  • UDP Echo Server
  • UDP Echo Client
  • 组播(Multicast)和广播(Broadcast)


5、Socket
Options和 IP Options

  • 常用的Socket Options
  • 常用的IP Options
  • Socket选项和IP选项对网络应用的影响

6、I/O多路复用:构建反应式(Reactive)网络应用

  • UNIX I/O多路复用机制概要
  • 为什么I/O 多路复用对于网络应用很重要
  • I/O 多路复用与多线程(反应式模型和并发模型)
  • select / poll
  • 在TCP Server和UDP Server中使用select和poll
  • Linux特有I/O 多路复用机制:Event poll (epoll)
  • 在TCP Server和UDP Server中使用epoll

7、异步I/O:构建前摄式(Proactive)网络应用

  • 相关概念:同步I/O和异步I/O、Proactor模式
  • 异步I/O 是如何提高I/O 性能的
  • 异步I/O系列操作
  • 使用异步I/O的机制构建TCP Server

8、高性能网络编程讨论

  • 考究高性能网络编程中应该遵循的原则,讨论并发、同步、事件多路分离等机制的适用场合
  • 网络应用的瓶颈何在
  • 事件多路分离 vs 一连接一线程 (Event demultiplexing vs One thread per connection)
  • 同步I/O vs 异步I/O (Synchronous I/O vs Asynchronous I/O)
  • 如何适当地使用多线程
  • 什么时候需要多个 事件多路分离线程

9、应用层协议定义与实现

  • 为什么要自定义应用层协议
  • 定义应用层协议 (以XMMEP协议为例)
  • 用C++实现自定义的协议 (以XMMEP协议为例)

注:XMMEP为X-Messenger Message Exchanging Protocol

五、时间安排

课程时间:2天,以每天6小时计,具体安排如下:

  • Day1

     

    • 1 - POSIX Thread - 多线程
    • 2 - Socket 简介
    • 3 - TCP Socket
    • 4 - UDP Socket
    • 5 - Socket Options和 IP Options
  • Day2

     

    • 6 - I/O多路复用:构建反应式(Reactive)网络应用
    • 7 - 异步I/O:构建前摄式(Proactive)网络应用
    • 8 - 高性能网络编程讨论
    • 9 - 应用层协议定义与实现
    • 课程回顾与总结

六、课程资源

      可获取的课程资源见: 教学资源

Linux高性能网络编程


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论