设为首页 收藏本站
查看: 1124|回复: 0

[经验分享] Node.js与Golang使用感受与小结【一】

[复制链接]

尚未签到

发表于 2018-9-20 08:27:31 | 显示全部楼层 |阅读模式
  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协议才成就了今天的地位,行业的标准。
DSC0000.png DSC0001.png

  二、HTTP服务器编写与编程语言无关
  2009年之前,大部份web方面的从业者都习惯于使用服务器+语言的运行模式,比如用
  Apache+php 或Nginx+php的模式。但随后出现的一些语言平台以及基于某些语言的框架打破了这种模式。比如Node.js,又比如Ruby社区的Rails。由此可见编写一个HTTP服务器,与您所使用的语言没太多关系。不管你用javascript、或php或python,只要能把内容通过HTTP协议推送到前端浏览器就好。
DSC0002.png

  三、构建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版本,但是还是有部份用户使用更为古老的版本)。下图是一个请求报文的抓包截图,我们将会对其进行简单的说明。
DSC0003.png

  字段
  字段名
  解释
  扩展
  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
  告诉服务器,此页面不缓存
  做页面缓存控制的时候可以使用
  第一行 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
  QQ:490821193
  从03年开始玩论坛,但正式写代码是前几年的事情。刚工作前两主要写php程序,目前主要专职写
  Javascript.平时喜欢研究各种新鲜技术~~
  Node与Golang的粉丝~~
  ==========================================================



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-598492-1-1.html 上篇帖子: Golang redigo hmset hset 问题 下篇帖子: 『Golang』Go简介以及环境搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表