谈到socket.io,就不能不提一下websocket,websocket是html5的新特性之一,多少web开发者为之兴奋,websocket可以使web程序客户端和服务端之间保持长连接,可以实现实时通讯,而且API简单易用,但是由于浏览器的支持不同,又是一个头疼的事情。后来,socket.io出现了,在某种程度上,socket.io就是websocket,其实socket.io与websocket不是一回事,而且websocket可以说是socket.io的一个子集,socket.io的底层实现其实有5种方式,websocket只是其中一种,只不过在默认的情况下,我们建立的socket.io连接,底层也是调用websocket的实例。当我们io.connect()建立一个socket连接的时候,返回的是namespace实例,namespace实例中有个socket实例,当新建一个连接,或者发送一条消息的时候,namespace->socket->transport->websocket(xhrpolling...),其实发送一条消息真正的发送者还是底层的websocket或是xhrpolling或其他的几种,而socket.io只是一个组织者,当我们需要建立连接的时候,它自己会在其内部挑选一种连接方式,然后实现连接。具体的socket.io内部实现还需要进一步学习源码。
本文的水平还只是在socket.io的实践上,其