Node.js与Golang使用感受与小结1
Node.js与Golang使用感受与小结【一】
Node.js与 Golang 使用感受与小结
目录
一、互联网的基石 TCP/IP 协议
二、 HTTP 服务器编写与编程语言无关
三、构建 HTTP 服务器需要掌握的知识点
四、 HTTP 协议基础
五、 Node.js 简介
六、是前端选择,还是后端的福音?
七、 Node.js 与传统 php-fpm 模式之间的对比
八、安装 Node.js
九、让浏览器读懂你的心 --Content-Type
十、向浏览器发送文件
十一、 Node.js 异步流程控制(序列模式、并发模式、有限并发模式)
十二、静态资源文件的简单优化
十三、现在还需少些什么?
十四、 Golang 简介
十五、为什么要用 Golang ?
十六、安装 Golang 开发环境
十七、如何使用 Golang 编写一个 HTTP 服务器?
十八、 Golang 的 http 包与 Node.js 的 http 模块对比
前言
这篇文章是对于近段时间以来我对于这两个平台的一些初步的了解,或许文中某些观点与您有所不同,但这却是此时我对这两个平台的一些认识,以及使用这两个平台给我带来的真实感受。
一、互联网的基石 TCP/IP 协议
可以毫不夸张的说,如果没有 TCP/IP 协议,那么也就没有此时的互联网。 TCP/IP 协议的架构层,经常被人们与 OSI 网络分层相对比。从概念上来说 OSI 或许更加完善先进,但是历史却选择了 TCP/IP 协议。因为早期的 unix 系统实现了 TCP/IP 协议,并且运行的很好。于是 OSI 模式便很少有人愿意去实现它,也许正是因为这样。 TCP/IP 协议才成就了今天的地位,行业的标准。
二、 HTTP 服务器编写与编程语言无关
2009年之前,大部份 web 方面的从业者都习惯于使用服务器 + 语言的运行模式,比如用
Apache+php 或 Nginx+php 的模式。但随后出现的一些语言平台以及基于某些语言的框架打破了这种模式。比如 Node.js ,又比如 Ruby 社区的 Rails 。由此可见编写一个 HTTP 服务器,与您所使用的语言没太多关系。不管你用 javascript 、或 php 或 python, 只要能把内容通过 HTTP 协议推送到前端浏览器就好。
三、构建 HTTP 服务器需要掌握的知识点
1、 HTTP 协议基础(知道 HTTP 通信的基本模式,包括常用报文)
这篇文章没有打算对于某门语言进行入门级别的指导,因此您可能需要自己去网络上搜集这方面的资源。关于 HTTP 协议基础可以参考《 HTTP 权威指南》,您可以花一两周的时间把这本书看完。相信您看完之后,多少都会对您的知识体系有所帮助。
2、熟悉一门语言 python,ruby,php,javascript 等,甚至 Lisp 也行。
熟悉一门语言是必须的,建议您选择一门喜欢的语言去学习,无论是 Golang 或是 javascript ,都是不错的开始。编程语言很大程度上只是你去实现某些事情的一个工具,不必执着于哪门语言好或坏,每一门语言能存在五年以上并且还有很多人用的语言,必然有着它吸引人的地方。
3、能够用你熟悉的语言进行基于 TCP/IP 协议上的通信。
无论你选择什么样的语言,如果进行网络编程的话都需要想办法让它能支持 TCP/IP 协议。据目前的情况来看,很多现代语言或多或少的都有方法去支持 TCP/IP 通信。甚至 php 这门语言,也可以通过 libevent 的扩展实现一个简单的 http 服务器。
四、 HTTP 协议基础
HTTP是以 TCP/IP 为基础的网络协议,目前该协议最为常用的版本是 1.1 版本。了解 HTTP 协议的一些简单知识,可以在您编写服务器时更快的发现和解决问题。当然 HTTP 头中的很多信息对于网站的优化都会有影响,比如头部中的缓存控制可以让您减少服务器的 I/O 消耗,现代服务器的主要瓶颈还是在于 I/O 消耗。
HTTP协议主要由两个过程组成 ------ 请求报文与返回报文。
关于请求报文
请求报文主要由两部份组成,第一部份则是起始行,起始行规定了请求时使用的 HTTP 方法、请求资源路径以及当前客户端使用的 HTTP 协议版本(虽然现在大部份浏览器都默认使用 1.1 版本,但是还是有部份用户使用更为古老的版本)。下图是一个请求报文的抓包截图,我们将会对其进行简单的说明。
字段
字段名
解释
扩展
Host
nodejs.org
告诉服务器当前访问的主机名为nodejs.org
如果你正在实现一个类似于Apache中的vhost功能,那么这个字段可能对你有用
User-Agent
告诉服务器,当前访问您的设备的工作环境
如果你正在做一个浏览器信息统计的功能,那么这段报文可能对你有用,当然这段报文也可以被用户伪造
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
告诉服务器,当前访问您的浏览器支持些什么文档类型
Accept-Language
en-US,en;q=0.5
告诉服务器,当前访问您的设备支持些什么语言
如果您正在制作一个国际化的站点,那么这一部份信息可能对您有用。
Accept-Encoding
gzip, deflate
告诉服务器,当前访问您的设备支持哪些压缩算法
如果您想减少网络传输量,特别是静态资源的传输量。可能这一部份信息对您有用,在实际工作中有些静态资源通过Gzip压缩后,体积只有原来的30%左右。
Pragma
no-cache
告诉服务器,此页面不缓存
事实上这个字段可以用Cache-Control控制
Cache-Control
no-cache
告诉服务器,此页面不缓存
做页面缓存控制的时候可以使用
第一行 GET http://nodejs.org/ HTTP/1.1 这一行的意思是浏览器告诉服务器端,当前正在使用 HTTP 1.1 协议中的 GET 方法获取 http://nodejs.org/ 这个路径的资源。第一行之下的部份,可以单独看成一个部份。以键值对( K-V )的形式存在,可以想像成关系数据库中的字段与字段值。
Web 开发基本上都是围绕 http 协议展开,所以了解并熟悉 http 协议对于长远发展来说是有好处的。通过合理利用 http header 字段,还能够帮助我们减少很多安全方面的问题。但目前注重一块的 web 开发人员较少。
未来完,,,待续
==========================================================
关于作者:
网名:念念之间 现居:深圳
Email:jinfei121@qq.com
从03年开始玩论坛,但正式写代码是前几年的事情。刚工作前两主要写php程序,目前主要专职写
Javascript.平时喜欢研究各种新鲜技术~~
Node与Golang的粉丝~~
==========================================================
作者:念念之间 邮箱:jinfei121@qq.com 简介:从事于web开发前后端技术的研究与开发工作,对php、lua、javascript等语言均有所了解。
分类: 后端
标签: Nodejs , Node.js , Go语言 , Golang , http服务器
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于Node.js与Golang使用感受与小结1的详细内容...