所有
我对Socket.io很新,现在,学习如何使用socket.io和Express.js构建一个实时聊天应用程序,一个问题总是让我困惑的是:
Socket.io和Express.js之间有什么关系?
var io = require('socket.io')(server);
我试图将socket.io视为一个库来提供一个新的通信协议处理程序,就像Express一样可以处理http和https。但是为什么socket.io需要绑定到Express服务器才能工作,就像在代码中一样:
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
有没有人能详细说明整个初始化期间发生的事情:
{ public function getDelete($key = NULL) $_DELETE = [];
parse_str(file_get_contents("php://input"), $_DELETE);
return NULL !== $key ? self::arrayKey($key, $_DELETE) : $_DELETE;
}
由于
答案 0 :(得分:6)
每个socket.io/webSocket连接都以HTTP请求开头。因此,任何webSocket服务器支持都需要一个可以记录初始请求的HTTP服务器。该初始请求包含"升级" header是切换到webSocket协议的请求,因此在处理之后,传入的HTTP / TCP连接将变为webSocket / TCP连接。
所以,因为webSockets意味着与你的web服务器共存,甚至使用相同的传入端口(使webSocket请求成为同源请求并使用默认端口80),这意味着webSocket请求完全相同端口和与常规HTTP请求完全相同的服务器,然后为了支持该场景,socket.io必须与您的Web服务器(在本例中为Express)集成,以便socket.io可以在Express http服务器中安装处理程序,以便任何传入的http请求恰好是传入的socket.io连接将由socket.io代码而不是其他Express处理程序处理。
仅供参考,socket.io不需要Express。如果自己配置,它将创建自己的HTTP服务器,但这样做需要HTTP服务器与您的Web服务器不同的主机或端口,这通常不是所需的配置。
因此,socket.io可以通过多种方式配置。您可以将Express实例传递给它,在这种情况下,它会向Express添加请求处理程序。你可以传递一个普通的http服务器,在这种情况下,它会向该服务器添加一个请求处理程序,或者你可以传递一个端口号,它将创建自己的http服务器。在所有情况下,它都需要一个http服务器才能支持传入的socket.io/webSocket连接。