文档章节

Node.js与Golang使用感受与小结【一】

念念之间
 念念之间
发布于 2013/05/22 14:20
字数 1876
阅读 2683
收藏 21

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.jshttp模块对比

 

前言

   这篇文章是对于近段时间以来我对于这两个平台的一些初步的了解,或许文中某些观点与您有所不同,但这却是此时我对这两个平台的一些认识,以及使用这两个平台给我带来的真实感受。

一、互联网的基石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、或phppython,只要能把内容通过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版本,但是还是有部份用户使用更为古老的版本)。下图是一个请求报文的抓包截图,我们将会对其进行简单的说明。

 第一行 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的粉丝~~

==========================================================

© 著作权归作者所有

念念之间
粉丝 17
博文 8
码字总数 8607
作品 1
深圳
程序员
私信 提问
加载中

评论(8)

GarethXiao
GarethXiao
没有谈到golang
行陌路
行陌路
期待后文
念念之间
念念之间 博主
最近有点忙,后面的文章等整理下在发
Seven____7
Seven____7
好文~ 期待后续
秋之回忆
念念写的真的很不错,你真的是太有钻石精神了,短短的两年时间,你简直脱胎换骨一般,果断顶起!加油,期待更多原创!
YangMiao
YangMiao
期待~~
z
zx32342342
同样期待后续内容
西门飞
西门飞
好的 顶 期待后续
Node.js与Golang使用感受与小结【三】--JS异步流程控制(序列模式、并发模式、有限...

Node.js与Golang使用感受与小结 目录 一、互联网的基石TCP/IP协议 二、HTTP服务器编写与编程语言无关 三、构建HTTP服务器需要掌握的知识点 四、HTTP协议基础 五、Node.js简介 六、是前端选择...

念念之间
2013/06/13
1K
1
golang vs dlang vs nodejs vs php 性能对比较量

这是我本机开的一个单核1G内存的Hyper-V虚拟机,首先我们使用的语言和框架版本给大家看一下: root@kerisy:/home/zoujiaqing# go versiongo version go1.5.1 linux/amd64root@kerisy:/home/...

冰力
2015/11/13
2.2K
3
golang: Baa框架文章列表

database: mongodb服务启动脚本 golang: Baa框架中的依赖注入(DI)是个什么鬼? golang go get出现unrecognized import path 微服务实践 - golang Thrift 开发一个月的感受 Algorithm: 移动...

d_watson
2016/06/13
33
0
macOS Mojave 10.14安装nvm

nodejs的版本迭代非常快速, 时至今日(2019年2月7日), nodejs的最新版本是11.9.0 而很多的优秀的工具如Easy Muke只能使用8.*的nodejs版本, 为了不同版本的nodejs能在同一个计算机上运行, 我们...

木子昭
02/07
0
0
swoole-1.7.7 发布,Http 服务器性能大幅提升

swoole-1.7.7 发布,内置Http服务器性能是Node.js的12倍 PHP的异步并发扩展swoole发布了 1.7.7 版本,此版本主要有: 增加对cygwin环境的支持 增加单次定时器的after接口 onClose事件调整为在...

matyhtf
2014/10/28
9.5K
65

没有更多内容

加载失败,请刷新页面

加载更多

Go 关闭 channel 的 close 方法

在 Go 中我们所以 close() 来关闭一个 channel 官方的注释如下 The close built-in function closes a channel, which must be either bidirectional or send-only. It should be executed o......

mickelfeng
23分钟前
3
0
语音转文字什么方法比较简单

在很多时候一些比较重要的对话需要录制下来,在录制完成后还需要整理出文字,可是长时间的录音内容想要整理出文字是非常的麻烦的。需要花费大量的时间将录制的声音转换成文字,那么想要简单快...

401恶户
26分钟前
5
0
IIS7配置thinkphp5项目到public目录下

有个项目,tp5写的,要配置到项目的public目录下,一开始报错了...后面删除了配置,重新配置成功了,记录一下过程 1.首先,将网站根目录变为你的public目录下 2.添加解析程序的CGI,这里选择你需要解...

老bia同学
30分钟前
10
0
Redis主从复制的配置和实现原理

Redis的持久化功能在一定程度上保证了数据的安全性,即便是服务器宕机的情况下,也可以保证数据的丢失非常少。通常,为了避免服务的单点故障,会把数据复制到多个副本放在不同的服务器上,且...

TurboSanil
32分钟前
8
0
counsul 集群

1 master节点 cat << EOF > /lib/systemd/system/consul.service[Unit]Description=consul-masterAfter=network-online.target [Service]ExecStart=/bin/sh -c 'consul agent ......

拜了个拜
33分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部