在HTML5的WebSocket以及HTTP2 出现之前,我们实现如网页聊天这种前后端实时通讯的功能只能是通过AJAX的方式了,无论是轮询也好,长轮询也罢。而后来者,WebSocket、HTTP2.0 更多的是在TCP运输层之上进行了改良,实现前后端的双向通信。比如WebSocket,在建立之前,客户端会和服务端建立一次http“握手”,之后就是基于TCP通信了。
HTML5提供的WebSocket API可以说为我们实现前后端实时双向通信提供了很大的便利。但我们今天的主角是Socket.IO 又是什么呢?Socket.IO是Node.js的开源项目,简单来讲,Socket.IO = long polling(长轮询)+WebSocket. 因此它可以在大部分浏览器上运行,即使浏览器不支持WebSocket,它也可以通过自动切换到long polling的方式进行实现。这里,longpolling相当于一个polyfill。但是,Socket.IO的API的书写仍能够保持WebSocket的简洁,这就是Socket.IO的优势。
本文提供了一个Nginx + Node.js的解决方案。首先,给出我们这里的一个具体的应用场景。下面的“与我相关”,大家都非常的熟悉。社交网络里面如果有人给你点赞,评论,转发那个小红点都会+1.这个时候就需要结合我们上面提到的,需要使用Socket.IO。
这里我们从后到前来讲解,分别从Node.js, Nginx, Web前端三个方面来讲解。其中会涉及到我遇到的一些技术细节,供我个人记录,也供大家参考。