Kua*_*uan 5 websocket node.js express socket.io
所有:
我对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);
});
});
Run Code Online (Sandbox Code Playgroud)
我试图将socket.io视为提供新通信协议处理程序的库,就像Express一样,它可以处理http和https。但是,为什么socket.io需要绑定到Express服务器才能工作,如代码中所示:
var io = require('socket.io')(server);
Run Code Online (Sandbox Code Playgroud)
任何人都可以给我一点细节,在整个初始化过程中发生了什么:
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
Run Code Online (Sandbox Code Playgroud)
谢谢
每个socket.io/webSocket连接都以HTTP请求开头。因此,任何webSocket服务器支持都需要可以响应初始请求的HTTP服务器。该初始请求包含一个“升级”标头,该标头是切换到webSocket协议的请求,因此在处理完之后,随后将传入的HTTP / TCP连接转换为webSocket / TCP连接。
因此,由于webSocket旨在与您的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连接。
| 归档时间: |
|
| 查看次数: |
1093 次 |
| 最近记录: |