是否需要将socket.io服务器连接到http服务器?

问题描述 投票:0回答:1

我是第一次学习socket.io。我想启动一个简单的套接字服务器。我看到我在互联网上找到的每个例子都是这样的:

var http = require('http');
var fs = require('fs');

// Loading the index file . html displayed to the client
var server = http.createServer(function(req, res) {
    fs.readFile('./index.html', 'utf-8', function(error, content) {
        res.writeHead(200, {"Content-Type": "text/html"});
        res.end(content);
    });
});

// Loading socket.io
var io = require('socket.io').listen(server);

// When a client connects, we note it in the console
io.sockets.on('connection', function (socket) {
    console.log('A client is connected!');
});


server.listen(8080);

问题

我的问题的核心很简单:在所有此类示例中,我都看到io侦听附加到现有的http服务器。

这是必要条件吗?如果是,为什么?是否通过http传输websocket协议?

用例

我的用例可能有点奇怪:我有一个vue开发服务器,该服务器必须保持运行,因为它提供实时重载等。它正在侦听8080端口,并且由vue-cli-service提供,因此我无法更改它附上东西。

此外,我还有一个“手工制作的”实验性smtp服务器,由node.js制成,并在端口25上运行

我想使用websocket允许我的smtp服务器“发布”,而我的Vue.js webapp则“监听”。

最终目标:使用简单的webgui创建一个独立的smtp-catch-all系统,因此通过我的smtp发送的每封邮件都被“推送”到我的webapp中,并且从未存储(也从未真正发送过!)

鉴于此,我想创建一个“独立” socket.io服务器。如果只需要一台http服务器,我将在特定端口上创建第二台服务器,以允许http-> websocket升级。然后我的Web应用程序将与该辅助服务器上的套接字服务器进行通信。

我更喜欢这种方式,因为使用pm2,我可以运行每个服务而无需彼此接触

node.js websocket
1个回答
0
投票

WebSocket协议是一个单独的协议,它不是建立在HTTP之上的。但是,HTTP协议本身具有升级机制(即WebSocket握手),可以将简单的HTTP连接转换为WebSocket连接。而且由于浏览器使用该浏览器,因此如果没有HTTP,就不可能通过浏览器建立WebSocket连接。

附带说明: socket.io也使用其他协议。如果WebSocket协议不可用,它会退回给他们。

现在,以下内容(显然)是一种观点:无需将一台服务器连接到另一台服务器。实际上,这是一种反模式。通常,您希望组件尽可能独立,以使对一个组件的更改不会影响另一个组件。而且:即使两者都通过HTTP运行,也没有理由这样做。我发现这些教程至少具有误导性。

© www.soinside.com 2019 - 2024. All rights reserved.