对 Socket.io 和 Express.js 之间的关系感到困惑
Confused about the relationship between Socket.io and Express.js
全部:
我是 Socket.io 的新手,现在正在学习如何使用 socket.io 和 Express.js 构建实时聊天应用程序,一个问题总是让我很困惑:
Socket.io和Express.js有什么关系?
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
我试图将 socket.io 视为一个库,以提供一种新的通信协议处理程序,就像可以处理 http 和 https 的 Express 一样。但是为什么 socket.io 需要绑定到 Express 服务器才能工作,如代码中所示:
var io = require('socket.io')(server);
谁能告诉我整个初始化过程中发生的事情的细节:
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
谢谢
每个套接字。io/webSocket 连接以 HTTP 请求开始。因此,任何 webSocket 服务器支持都需要一个可以处理初始请求的 HTTP 服务器。该初始请求包含一个 "upgrade" header,这是一个切换到 webSocket 协议的请求,因此在处理之后,传入的 HTTP/TCP 连接将变成 webSocket/TCP 连接.
因此,由于 webSockets 旨在 co-exist 与您的网络服务器甚至使用相同的传入端口(使 webSocket 请求成为 same-origin 请求并使用默认端口 80),这意味着 webSocket请求到达与常规 HTTP 请求完全相同的端口并到达完全相同的服务器,然后为了支持这种情况,socket.io 必须与您的 Web 服务器(在本例中为 Express)集成,以便 socket.io 可以在 Express http 服务器中安装一个处理程序,以便任何传入的 http 请求恰好是传入 socket.io 连接都将由 socket.io 代码处理,而不是由其他 Express 处理程序处理。
仅供参考,socket.io 周围没有快递。如果自行配置,它将创建自己的 HTTP 服务器,但这样做需要 HTTP 服务器位于与您的 Web 服务器不同的主机或端口上,这通常不是所需的配置。
因此,socket.io 可以通过多种方式进行配置。您可以将您的 Express 实例传递给它,在这种情况下,它将向 Express 添加一个请求处理程序。您可以向它传递一个普通的 http 服务器,在这种情况下,它会向该服务器添加一个请求处理程序,或者您可以向它传递一个端口号,它会创建自己的 http 服务器。在所有情况下,它都需要一个 http 服务器来支持传入的套接字。io/webSocket 个连接。
全部:
我是 Socket.io 的新手,现在正在学习如何使用 socket.io 和 Express.js 构建实时聊天应用程序,一个问题总是让我很困惑:
Socket.io和Express.js有什么关系?
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
我试图将 socket.io 视为一个库,以提供一种新的通信协议处理程序,就像可以处理 http 和 https 的 Express 一样。但是为什么 socket.io 需要绑定到 Express 服务器才能工作,如代码中所示:
var io = require('socket.io')(server);
谁能告诉我整个初始化过程中发生的事情的细节:
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
谢谢
每个套接字。io/webSocket 连接以 HTTP 请求开始。因此,任何 webSocket 服务器支持都需要一个可以处理初始请求的 HTTP 服务器。该初始请求包含一个 "upgrade" header,这是一个切换到 webSocket 协议的请求,因此在处理之后,传入的 HTTP/TCP 连接将变成 webSocket/TCP 连接.
因此,由于 webSockets 旨在 co-exist 与您的网络服务器甚至使用相同的传入端口(使 webSocket 请求成为 same-origin 请求并使用默认端口 80),这意味着 webSocket请求到达与常规 HTTP 请求完全相同的端口并到达完全相同的服务器,然后为了支持这种情况,socket.io 必须与您的 Web 服务器(在本例中为 Express)集成,以便 socket.io 可以在 Express http 服务器中安装一个处理程序,以便任何传入的 http 请求恰好是传入 socket.io 连接都将由 socket.io 代码处理,而不是由其他 Express 处理程序处理。
仅供参考,socket.io 周围没有快递。如果自行配置,它将创建自己的 HTTP 服务器,但这样做需要 HTTP 服务器位于与您的 Web 服务器不同的主机或端口上,这通常不是所需的配置。
因此,socket.io 可以通过多种方式进行配置。您可以将您的 Express 实例传递给它,在这种情况下,它将向 Express 添加一个请求处理程序。您可以向它传递一个普通的 http 服务器,在这种情况下,它会向该服务器添加一个请求处理程序,或者您可以向它传递一个端口号,它会创建自己的 http 服务器。在所有情况下,它都需要一个 http 服务器来支持传入的套接字。io/webSocket 个连接。