我创建了一个简单的应用程序来从socket.io开始,但是当我运行它时,Chrome(在其他浏览器中测试,结果相同)占用了我所有的CPU并发出了许多请求:
我是套接字新手,但我确信这不是它应该如何工作的。在浏览器中运行的代码非常简单,它应该只是连接到套接字并将所有接收到的数据记录到控制台:
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/