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

2024-02-20

我创建了一个简单的应用程序来从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(不是英语,而是捷克语),但没有任何改变。该教程有很多积极的反馈,所以我的电脑可能有问题。但什么?


我遇到了同样的问题,通过以下示例,客户端使用此 CDN 中的 socket.io 源:https://cdn.socket.io/socket.io-1.2.0.js 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 https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

socket.io - 数百个请求而不是一个连接 的相关文章

随机推荐

  • 从 Outlook 获取收件箱

    我在 Outlook 2010 中配置了两个 Exchange 帐户 但是我无法找到如何访问第二个帐户的收件箱 Session GetDefaultFolder 总是返回第一个 甚至枚举 Session Accounts 找到正确的帐户并调
  • for 循环缺少初始化

    我见过 for and for s 0 s 怎么就这样空白了 谢谢 The for声明的工作原理如下 for initialization test condition update 这三个中的任何一个或全部都可以省略 留空 所以 for
  • Eclipse源代码下载[已关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 在新的 Eclipse 中 我们具有右键单击 XSD 并从中生成 XML 的功能 有人可以指导我在哪里可以获得 Eclipse 此功能的源代码吗 我猜
  • 如何动态更改按钮模板WPF

    我怎样才能改变一个Button模板动态 我有一个ComboBox通过更改他选择的值 我想更改Button Template 这就是我一直在努力做的事情
  • Reactjs - 在悬停时渲染从数组渲染的列表项的单个图标

    我有这种从对象数组渲染的卡片 父组件 foo bar baz name string path string state isHovering false handleMouseHover gt const isHovering this
  • 调用 new 和 getInstance() 之间的区别

    正在呼叫Class getInstance 相当于new Class 我知道后者调用了构造函数 但是呢getInstance 谢谢 没有这样的方法Class getInstance 你可能把它与Class newInstance http
  • 将一串数字转换为十六进制并返回十进制 pandas python

    我目前有一串值 是在过滤 csv 文件中的数据后检索到的 最终我必须对数据进行一些过滤 但我有与列表 数据帧或数组相同的数字 我只需要获取字符串中的数字并将它们转换为十六进制 然后获取十六进制的前 8 个数字并将其转换为字符串中每个元素的十
  • 如何在多个存储过程上使用事务?

    您能否在一个存储过程中启动一项事务 然后在嵌套过程中回滚或提交它 提交和回滚有不同的效果 COMMIT 递减 TRANCOUNT ROLLBACK 将其推回到零 发生这种情况是因为 SQL Server 并不真正支持嵌套事务 如果您在嵌套存
  • Angular 6 延迟加载路线

    我想在我的项目中为管理员添加延迟加载路由 我使用 ASP Net Core 后端和 Angular 6 前端 因此我的编译代码输出目录是 wwwRoot Angular dist 当我编译项目时 我看到那里存在文件 admin admin
  • 为什么文件范围静态变量必须为零初始化?

    C 默认初始化不会将具有自动存储的变量清零 为什么要对静态存储变量进行特殊处理 C 和 C 定义的东西必须兼容吗 如果是这种情况 为什么 C 决定进行零初始化 如果文件范围静态变量提供了初始化程序 它们将首先被零初始化 然后再次被常量 动态
  • 当许多键具有相同的哈希码时,Java 8 的 HashMap 如何退化为平衡树?

    当许多键具有相同的哈希码时 Java 8 的 HashMap 如何退化为平衡树 我读到密钥应该实现Comparable定义排序 HashMap如何结合散列和自然排序来实现树 没有实现的类怎么办Comparable 或者当多个 不可相互比较时
  • 如何快速绘制数千个圆圈?

    我正在尝试绘制几个 数千个 圆形对象 我没有太多使用 python 的经验 我有兴趣指定位置 半径和颜色 有没有更有效的方法来达到相同的结果 import matplotlib pyplot as plt xvals 0 1 2 3 yva
  • iOS 推送其他应用的通知

    有没有办法接收所有应用程序的所有推送通知 那么所有通知都显示在通知中心吗 如果是 是否也可以在收到来自任何应用程序的任何推送通知时执行操作 Thanks 编辑 该应用程序是否会被苹果接受并不重要 推送通知将发送到注册接收通知的应用程序 您无
  • 使用 capistrano+nginx 在单个数字海洋 Droplet 中部署多个 Rails 应用程序

    我有一个在 IP xxx xxx xxx xx 的数字海洋服务器上运行的 Rails 应用程序 使用 Capistrano 部署现在很容易运行 现在我正在考虑使用 capistrano 将另一个应用程序部署到同一服务器 经过多次尝试研究我没
  • 应用程序强制退出并重新启动后如何恢复 NSURLSession 下载过程?

    我已经实施了NSURLSession用于从我们的服务器下载相当大的文件 现在 只要我在前台或后台工作并返回应用程序 交易就会正常工作并完成 但如果我强制退出使用多任务屏幕的应用程序 然后再次重新打开应用程序 下载过程尚未完成 尽管据我从文档
  • Twitter Bootstrap 响应式导航栏在小屏幕上损坏

    我一直在阅读文档并将我的代码与 Bootstrap 的示例进行比较 但我无法弄清楚为什么当我缩小浏览器窗口或在手机上查看它时 我网站上的导航栏会下降约 100px http warm ocean 8133 herokuapp com htt
  • 将负颜色数转换为 HEX 或 RGB

    我从未见过像这样的颜色代码 1 16777216 256等等 所以我当前的问题是这样的 我们有一个第三方软件 您可以在其中对值进行颜色编码 如下图所示 现在我正在创建一个显示这些值的 PHP 报告 但我还想使用与软件中定义的颜色相同的颜色来
  • 如何理解卡方列联表

    我有几个分类特征 Gender Married Dependents Education Self Employed Property Area from scipy stats import chi2 contingency chi2 p
  • android DatePickerDialog只显示一个按钮

    我知道有很多问题DatePickerDialog正如这篇文章所解释的Jelly Bean DatePickerDialog 有办法取消吗 https stackoverflow com questions 11444238 jelly be
  • socket.io - 数百个请求而不是一个连接

    我创建了一个简单的应用程序来从socket io开始 但是当我运行它时 Chrome 在其他浏览器中测试 结果相同 占用了我所有的CPU并发出许多请求 我是套接字新手 但我确信这不是它应该如何工作的 在浏览器中运行的代码非常简单 它应该连接