深入浅出node.js:7 网络编程

   利用Node可以十分方便地搭建网络服务器。在Web领域,大多数的编程语言需要专门的Web服务器作为容器,如ASP、ASP.NET需要IIS作为服务器,PHP需要搭载Apache或Nginx环境等,JSP需要Tomcat服务器等。但对于Node而言,只需要几行代码即可构建服务器,无需额外的容器。

   Node提供了net, dgram, http, https这4个模块,分别用于处理TCP, UDP, HTTP, HTTPS。适用于服务器端和客户端

7.1 构建TCP服务

    

7.2 构建UDP服务


7.3 构建HTTP服务

    

7.4 构建WebSocket服务

    它与Node之间的配合堪称完美,其理由有两条:

  • WebSocket客户端基于事件的编程模型与Node中自定义事件相差无几
  • WebSocket实现了客户端与服务器端之间的长连接,而Node事件驱动的方式十分擅长与大量的客户端保存高并发连接

除此之外,WebSocket与传统HTTP有如下好处:

  • 客户端与服务器端只建立一个TCP连接,可以使用更少的连接
  • WebSocket服务器端可以推送数据到客户端,这远比HTTP请求响应模式更灵活、更高效。
  • 有更轻量级的协议头,减少数据传送量。

   WebSocket最早是作为HTML5重要特性而出现的

   客户端的应用示例:


   在WebSocket之前,网页客户端与服务器端进行通信最高效的是Comet技术。实现Comet技术的细节是采用长轮询或iframe流。长轮询的原理是客户端向服务器端发起请求,服务器端只在超时或有数据响应时断开连接;客户端在收到数据或者超时后重新发起请求。这个请求行为拖着长长的尾巴,是故用Coment(彗星)来命名它。

    使用WebSocket的话,网页客户端只需一个TCP连接即可完成双向通信,在服务器端与客户端频繁通信时,无须频繁断开连接和重发请求。连接可以得到高效应用,编程模型也十分简洁。

    相比HTTP,WebSocket更接近于传输层协议,它并没有在HTTP的基础上模拟服务器端的推送,而是在TCP上定义独立的协议。让人迷惑的部分在于WebSocket的握手部分是有HTTP完成的,使人觉得它可能是基于HTTP实现的。

    协议主要分为两个部分:握手和数据传输。P182

    握手:

    数据传输:


7.5 网络服务与安全

      明文传递是容易被监控,为此将数据加密后在传输,但是对于应用层协议而言,仍然希望能够透明地处理数据,而无须操心网络传输过程中的安全问题。

      网景公司推出了SSL(安全套接层),对传输层加密,    随后IETF将其标准化,称为TLS(安全传输层协议)

      Node在网络安全上提供了3个模块

           crypto:用于加密解码

           tls模块:建立在TLS/SSL加密的TCP连接上

           https:完全与http模块接口一致,只是建立在安全的连接上

     TLS/SSL:

           密钥:TLS/SSL是一个公钥/私钥的结构,它是一个非堆成的结构,每个服务器端和客户端都有自己的公私钥。公钥用来加密要传输的数据,私钥用来解密接收到的数据。公钥和私钥是配对的,通过公钥加密的数据,只有通过私钥才能解密,所以在建立安全传输之前,客户端和服务器端之间需要互换公钥。客户端发送数据是要通过服务器端的公钥进行加密,服务器端发送数据时则需要客户端的公钥进行加密,如此才能完成加密解密的过程。P187

           为了解决出现中间人攻击(交换公钥的过程中)这种问题,数据传输过程中还需要对得到的公钥进行认证,以确认得到的公钥是出自目标服务器。

           引入数字证书,包含了服务器的名称和主机名、服务器的公钥、签名颁发机构的名称、来自签名颁发机构的签名。在连接建立前,会通过证书中的签名确认收到的公钥是来自目标服务器的,从而产生信任关系。

           数字证书:CA(数字证书认证中心)的作用是为站点颁发证书,且这个证书中具有CA通过自己的公钥和私钥实现的签名。

           通过CA机构颁发证书通常是一个烦琐的过程,需要付出一定的精力和费用。对于中小型企业而言,多半是采用自签名证书来构建安全网络的。P188

           CA机构将证书颁发给服务器端后,证书在请求的过程中会被发送给客户端,客户端需要通过CA的证书验证真伪。如果是知名的CA机构,它们的证书一般预装在浏览器中。如果是自己扮演CA机构,颁发自有签名证书则不能享受这个福利。

    HTTPS服务:需要用到私钥和签名证书




    





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值