网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。如何学习互联网编程呢?
1:学会用C++和socket或windows的http server api做一个http server,搞成一个小网站2:多加几个网页之后你就明白为什么大家总是需要一个template语言/工具了,然后你可以试着自己开发一个3:于是你开始试图做动态网页,你就要用jquery和XMLHttpRequest修改html本身还有和C++服务器进行数据交换4:然后你开始给你的网站加一个Windows桌面的客户端,这是对模块化能力的重大考验5:你会发现你重复了很多代码,所以开始使用MVC和一些小的设计模式来帮你划分模块6:然后你发现,尽管C++用IOCP是很方便,但是拼HTML字符串还是难爆了。于是你开始尝试把C++服务器改成纯粹的功能服务器,然后用一个薄薄的http server来host你的网页,网页开始用js获取后台数据,然后用js调用你的新template工具来生成HTML,再也不要在C++里面拼字符串了。
做到这里,你的小网站已经变成了 C++功能服务器/不知道什么写的http server/js+template+ajax的browser端/不知道什么写的GUI客户端
这个时候你差不多可以用你学到的知识来做你想要的东西,于是后面你就面临几大问题1:用户登录怎么做。authentication是需要特别丰富的知识的,而且在天朝不能因为规定你要给提供用户的密码你就非得把密码的明文保存在生产环境里等着被拖库。2:用户太多了,功能服务期一台机器hold不住了,你需要写分布式系统3:客户端渐渐蔓延到了windows phone、android、ios。如果你不让view层变得很薄,你就会在各种端和语言里面重复实现你的controller,做大了之后简直无法维护。
做到这里,你基本上已经碰到了如何在各种奇葩的语言之间交换数据的问题了。当然这个问题肯定很早就被人解决了,但是因为你需要学会整个知识框架体系,那你一定会开始去山寨一个你自己的protocol buffer这样的东西。服务器也开始知道如何用restful http server来把功能抽象成model了,然后你的MVC到这里就正式学会了。