javascript - socket.io - 数百个请求而不是一个连接

标签 javascript node.js sockets

我创建了一个简单的应用程序来从socket.io开始,但是当我运行它时,Chrome(在其他浏览器中测试,结果相同)占用了我所有的CPU并发出了许多请求:

enter image description here

我是套接字新手,但我确信这不是它应该如何工作的。在浏览器中运行的代码非常简单,它应该只是连接到套接字并将所有接收到的数据记录到控制台:

index.html

<!DOCTYPE html>
<html>
<head>
    <script src="https://cdn.socket.io/socket.io-1.2.0.js" charset="UTF-8"></script>
</head>
<body>
<script type="application/javascript">
    var Sockets = io.connect('http://localhost:4000');
    Sockets.on('Test', function (data) {
        console.log(data);
    });
</script>

</body>
</html>

此外,我的服务器文件如下所示:

服务器.js

var app = require('express')();
var http = require('http').Server(app);
var bodyParser = require("body-parser");
var io = require('socket.io')(http);
var port = 4000;

http.listen(port, function () {
    console.log('Server running at port ' + port);
});

var urlencodedParser = bodyParser.urlencoded({extended: false});
app.post('/', urlencodedParser, function (req, res) {
    if (!req.body) return res.sendStatus(400);
    var post = req.body;
    io.emit("Test", post.data);
    console.log(post.data);
    res.send('true');
});

io.on('connection', function(socket){
    console.log('a user connected');
    socket.on('disconnect', function(){
        console.log('user disconnected');
    });
});

当我运行服务器 node server.js 时,我收到了 Server running at port 4000 消息,一切看起来都很好。但是,当我在浏览器中打开 index.html 时, Node 控制台会收到用户连接消息。浏览器不是连接一个客户端,而是每秒发出数十个请求。当我关闭浏览器时,一段时间内没有任何输出,然后 Node 控制台会收到用户已断开连接消息。

该服务器应将通过 POST 发送的所有数据重定向到连接的套接字。当我发出此 POST 请求时, Node 服务器会收到它(我知道,因为它会将其打印到 Node 控制台中)。但套接字客户端没有收到它,因为浏览器控制台中没有输出(但浏览器仍然每秒建立数十个新连接。

这里出了什么问题?首先,我以为我搞砸了,所以我回去并从 tutorial I found 复制粘贴代码。 (不是英语,而是捷克语),但没有任何改变。该教程有很多积极的反馈,所以我的电脑可能有问题。但什么?

最佳答案

我也遇到过同样的问题,按照客户端使用此 CDN 中的 socket.io 源的示例:https://cdn.socket.io/socket.io-1.2.0.js

每当我尝试运行该文件时,都会创建大量客户端(无论我只是双击该 html 文件,还是将其放在 Web 服务器下,例如 IIS)。然后我意识到这可能是一个旧版本,我只是从这个来源获取了最新版本:https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js

现在一切正常。 希望这有帮助

关于javascript - socket.io - 数百个请求而不是一个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47296987/

相关文章:

javascript - Twitter Bootstrap 适用于触摸屏吗?

c# - 套接字通讯失败

javascript - 如何通过 txID 查找交易 (node.js)

javascript - 当变量在全局范围内定义时,为什么 for 循环需要很长时间?

javascript - 如何在使用 node.js 时将数据发送到指定连接

javascript - 为什么我的函数在 NodeJS、Sequelize 中返回 null

c++ - 包含消息长度的两个字节 header 的部分 recv() 怎么样?

带 VPN 连接的 Java Socket

javascript - 如何在 Express 4.0 中发送 Flash 消息?

node.js - Sails js -模型结果集变量范围