A.1.5 网络编程(www.cppentry.com)的各种任务角色
计算机网络是个big topic,涉及很多人物和角色,既有开发人员,也有运维人员。比方说:公司内部两台机器之间ping 不通,通常由网络运维人员解决,看看是布线有问题还是路由器设置不对;两台机器能ping 通,但是程序连不上,经检查是本机防火墙设置有问题,通常由系统管理员解决;两台机器能连上,但是丢包很严重,发现是网卡或者交换机的网口故障,由硬件维修人员解决;两台机器的程序能连上,但是偶尔发过去的请求得不到响应,通常是程序bug,应该由开发人员解决。
本文主要关心开发人员这一角色。下面简单列出一些我能想到的跟网络打交道的编程(www.cppentry.com)任务,其中前三项是面向网络本身,后面几项是在计算机网络之上构建信息系统。
1. 开发网络设备,编写防火墙、交换机、路由器的固件(firmware)。
2. 开发或移植网卡的驱动。
3. 移植或维护TCP/IP 协议栈(特别是在嵌入式系统上)。
4. 开发或维护标准的网络协议程序,HTTP、FTP、DNS、SMTP、POP3、NFS。
5. 开发标准网络协议的"附加品",比如HAProxy、squid、varnish 等Web loadbalancer。
6. 开发标准或非标准网络服务的客户端库,比如ZooKeeper 客户端库、memcached客户端库。
7. 开发与公司业务直接相关的网络服务程序,比如即时聊天软件的后台服务器、网游服务器、金融交易系统、互联网企业用的分布式海量存储、微博发帖的内部广播通知等等。
8. 客户端程序中涉及网络的部分,比如邮件客户端中与POP3、SMTP 通信的部分,以及网游的客户端程序中与服务器通信的部分。
本文所指的"网络编程(www.cppentry.com)"专指第7 项,即在TCP/IP 协议之上开发业务软件。换句话说,不是用Sockets API 开发mudu这样的网络库,而是用libevent、muduo、Netty、gevent 这样现成的库开发业务软件,mudu自带的十几个示例程序是业务软件的代表。