Socket.io,为什么需要一个http服务器?

ome*_*rts 5 javascript websocket socket.io

从Socket.IO lib(或任何其他示例)查看以下示例:

// note, io(<port>) will create a http server for you
var io = require('socket.io')(80);

io.on('connection', function (socket) {
  io.emit('this', { will: 'be received by everyone'});

  socket.on('private message', function (from, msg) {
    console.log('I received a private message by ', from, ' saying ', msg);
  });

  socket.on('disconnect', function () {
    io.emit('user disconnected');
  });
});
Run Code Online (Sandbox Code Playgroud)

似乎Socket.IO总是依赖于http服务器,它会为你创建一个,就像上面的例子一样.

由于websockets不是HTTP,为什么需要http服务器?如果它只是为了后备,为什么它如此集成?

rob*_*lep 10

由于websockets不是HTTP,为什么需要http服务器?

你的问题似乎基于的前提是它socket.io是一个websocket库,它不是.

这是一个实时,双向的基于事件的通信库(来自主页的模糊).它使用的传输之一是websockets,但它也提供其他传输(XHR/JSONP),不仅作为后备,而且还适用于不支持/不需要/需要websockets的情况.

在传输之上,它提供了额外的功能,如分段(名称空间,房间),确认,广播等.

即使可以使用websockets,初始连接也可以通过HTTP完成.此外,socket.io服务器将附加到HTTP服务器,以便它可以通过它自己的客户端代码/socket.io/socket.io.js.

也就是说,尽管您不需要 HTTP服务器来使用常规的websockets,但不可否认的是websocket协议的设计考虑了HTTP(为了允许HTTP和websocket服务器在同一个TCP端口上共存).