Node.js与Golang使用感觉与小结 javascript
目录 php
1、互联网的基石TCP/IP协议 html
2、HTTP服务器编写与编程语言无关 前端
3、构建HTTP服务器须要掌握的知识点 java
4、HTTP协议基础 node
5、Node.js简介 python
6、是前端选择,仍是后端的福音? web
7、Node.js与传统php-fpm模式之间的对比 算法
8、安装Node.js 数据库
9、让浏览器读懂你的心--Content-Type
10、向浏览器发送文件
11、Node.js异步流程控制(序列模式、并发模式、有限并发模式)
12、静态资源文件的简单优化
十3、如今还需少些什么?
十4、Golang 简介
十5、为何要用Golang ?
十6、安装Golang开发环境
十7、如何使用Golang 编写一个HTTP服务器?
十8、Golang 的http包与Node.js的http模块对比
前言
这篇文章是对于近段时间以来我对于这两个平台的一些初步的了解,或许文中某些观点与您有所不一样,但这倒是此时我对这两个平台的一些认识,以及使用这两个平台给我带来的真实感觉。
1、互联网的基石TCP/IP协议
能够绝不夸张的说,若是没有TCP/IP 协议,那么也就没有此时的互联网。TCP/IP协议的架构层,常常被人们与OSI网络分层相对比。从概念上来讲OSI或许更加完善先进,可是历史却选择了TCP/IP协议。由于早期的unix系统实现了TCP/IP协议,而且运行的很好。因而OSI模式便不多有人愿意去实现它,也许正是由于这样。TCP/IP协议才成就了今天的地位,行业的标准。
2、HTTP服务器编写与编程语言无关
2009年以前,大部份web方面的从业者都习惯于使用服务器+语言的运行模式,好比用
Apache+php 或Nginx+php的模式。但随后出现的一些语言平台以及基于某些语言的框架打破了这种模式。好比Node.js,又好比Ruby社区的Rails。因而可知编写一个HTTP服务器,与您所使用的语言没太多关系。无论你用javascript、或php或python,只要能把内容经过HTTP协议推送到前端浏览器就好。
3、构建HTTP服务器须要掌握的知识点
一、HTTP协议基础(知道HTTP通讯的基本模式,包括经常使用报文)
这篇文章没有打算对于某门语言进行入门级别的指导,所以您可能须要本身去网络上搜集这方面的资源。关于HTTP协议基础能够参考《HTTP权威指南》,您能够花一两周的时间把这本书看完。相信您看完以后,多少都会对您的知识体系有所帮助。
二、熟悉一门语言python,ruby,php,javascript 等,甚至Lisp也行。
熟悉一门语言是必须的,建议您选择一门喜欢的语言去学习,不管是Golang或是javascript,都是不错的开始。编程语言很大程度上只是你去实现某些事情的一个工具,没必要执着于哪门语言好或坏,每一门语言能存在五年以上而且还有不少人用的语言,必然有着它吸引人的地方。
三、可以用你熟悉的语言进行基于TCP/IP协议上的通讯。
不管你选择什么样的语言,若是进行网络编程的话都须要想办法让它能支持TCP/IP协议。据目前的状况来看,不少现代语言或多或少的都有方法去支持TCP/IP通讯。甚至php这门语言,也能够经过libevent 的扩展实现一个简单的http服务器。
4、HTTP协议基础
HTTP是以TCP/IP为基础的网络协议,目前该协议最为经常使用的版本是1.1版本。了解HTTP协议的一些简单知识,能够在您编写服务器时更快的发现和解决问题。固然HTTP头中的不少信息对于网站的优化都会有影响,好比头部中的缓存控制可让您减小服务器的I/O消耗,现代服务器的主要瓶颈仍是在于I/O消耗。
HTTP协议主要由两个过程组成------请求报文与返回报文。
关于请求报文
请求报文主要由两部份组成,第一部份则是起始行,起始行规定了请求时使用的HTTP方法、请求资源路径以及当前客户端使用的HTTP协议版本(虽然如今大部份浏览器都默认使用1.1版本,可是仍是有部份用户使用更为古老的版本)。下图是一个请求报文的抓包截图,咱们将会对其进行简单的说明。
第一行 GET http://nodejs.org/ HTTP/1.1 这一行的意思是浏览器告诉服务器端,当前正在使用HTTP 1.1协议中的GET方法获取http://nodejs.org/ 这个路径的资源。第一行之下的部份,能够单独当作一个部份。以键值对(K-V)的形式存在,能够想像成关系数据库中的字段与字段值。
字段 |
字段名 |
解释 |
扩展 |
Host |
nodejs.org |
告诉服务器当前访问的主机名为nodejs.org |
若是你正在实现一个相似于Apache中的vhost功能,那么这个字段可能对你有用 |
User-Agent |
:Mozilla/5.0 (windows NT 6.1; wow64;rv:18.0) Gecko/20100101 Firefox/18.0 |
告诉服务器,当前访问您的设备的工做环境 |
若是你正在作一个浏览器信息统计的功能,那么这段报文可能对你有用,固然这段报文也能够被用户伪造 |
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 |
告诉服务器,此页面不缓存 |
作页面缓存控制的时候可使用 |
Web开发基本上都是围绕http协议展开,因此了解并熟悉http协议对于长远发展来讲是有好处的。经过合理利用http header字段,还可以帮助咱们减小不少安全方面的问题。但目前注重一块的web开发人员较少。
将来完,,,待续
==========================================================
关于做者:
网名:念念之间 现居:深圳
Email:jinfei121@qq.com
QQ:490821193
从03年开始玩论坛,但正式写代码是前几年的事情。刚工做前两主要写php程序,目前主要专职写
Javascript.平时喜欢研究各类新鲜技术~~
Node与Golang的粉丝~~
==========================================================