我创建了一个简单的应用程序来从socket.io开始,但是当我运行它时,Chrome(在其他浏览器中测试,结果相同)占用了我所有的CPU并发出许多请求:
我是套接字新手,但我确信这不是它应该如何工作的。在浏览器中运行的代码非常简单,它应该连接到套接字并将所有接收到的数据记录到控制台:
索引.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时,节点控制台被垃圾邮件发送a user connected
消息。浏览器不是连接一个客户端,而是每秒发出数十个请求。当我关闭浏览器时,有一段时间没有输出,然后节点控制台被垃圾邮件发送user disconnected
消息。
该服务器应将通过 POST 发送的所有数据重定向到连接的套接字。当我发出此 POST 请求时,节点服务器会收到它(我知道,因为它会将其打印到节点控制台中)。但套接字客户端没有收到它,因为浏览器控制台中没有输出(但浏览器仍然每秒建立数十个新连接。
这里有什么问题吗?首先我以为我搞砸了,所以我回去复制粘贴代码我找到的教程 https://www.itnetwork.cz/php/websocket(不是英语,而是捷克语),但没有任何改变。该教程有很多积极的反馈,所以我的电脑可能有问题。但什么?