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

时间:2016-06-15 12:56:57

标签: 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');
  });
});

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

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

1 个答案:

答案 0 :(得分:7)

  

由于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端口上。)