Socket.io 不断重复连接并忽略其他事件

2024-05-05

我正在尝试制作一个网络应用程序,用户可以在其中互相玩环形国际象棋。这是我的 app.js,在服务器上:

var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = process.env.PORT || 8000;

app.use(express.static('public'));
app.get('/', function(req, res) {
  res.sendFile(__dirname + '/public/index.html');
  console.log("Got request for homepage");
});

io.on('connection', function(socket){
   console.log('A client has connected to the server');
   socket.on('move', function(moveString){
     console.log("Move made: " + moveString);
   });
  socket.on('disconnect', function(){
    console.log('A client has disconnected from the server');
  });
});

http.listen(port, function() {
    console.log('listening on *: ' + port);
});

公共目录包含像index.html这样的文件,其中包含棋盘,以及一些控制棋盘并只允许合法移动的javascript和CSS文件。 board.js 是这个的主文件。

在客户端,我的 index.html 文件包含以下行:

<script src="js/board.js"></script>

我的 board.js 文件包含以下行:

var socket = io();

而且在移动验证功能中,每当进行有效移动时,我都会有一行

socket.emit('move', moveString);

但是,每当我从终端运行 Node app.js,然后在 Web 浏览器中访问 localhost:8000 时,终端会每秒多次重复显示“客户端已连接到服务器”,如下所示:

终端截图 https://i.stack.imgur.com/IGaJx.png

另外,每当我从浏览器进行移动或移动到另一个页面时,服务器似乎不会注册这些事件(它不会记录“客户端已与服务器断开连接”,也不会记录移动已发生)已制作)。我究竟做错了什么?


好的,看来您在服务器上运行 socket.io v2.0.4,在客户端上运行 v1.2.0。像这样的版本号不匹配可能会导致您看到的行为,这实际上是无法正确连接,这会导致立即尝试重新连接,而且它永远不会停止这样做。

您可以在客户端中使用以下命令直接从服务器获取正确的版本:

<script src="/socket.io/socket.io.js"></script>

socket.io 服务器有一个预构建的路由处理程序/socket.io/socket.io.js当该请求到来时,它将自动从 node_modules 目录中提供正确匹配的客户端版本。

如果您希望客户端来自 CDN,那么您需要获取与服务器版本完全匹配的 CDN 版本,并且每当您升级服务器版本时,都必须修复 CDN 版本以匹配。

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

Socket.io 不断重复连接并忽略其他事件 的相关文章

随机推荐

  • 是否可以从猫鼬文档中获取模型?

    var UserSchema new Schema Schema var User mongoose Model User UserSchema Model var user new User Document 仅给定文档 在本例中为用户
  • 如何使用实体框架更新特定记录的一个字段?

    我想要更新一个名叫 Pejman 的人的家庭情况 这是我的对象类 public class Person public int Id get set public string FirstName get set public string
  • 使用 CSS 更改文本选择颜色?

    我目前正在开发一个网站 我想更改文本选择颜色 我已经有点工作了 这是我的样式表中的代码 部分 selection background FF0099 color black text shadow none moz selection ba
  • 在 C、C++ 中实现腐蚀、膨胀

    我对二值图像的膨胀是如何完成的有理论上的了解 AFAIK 如果我的 SE 结构元素 是这样的 0 1 1 1 在哪里 代表中心 我的图像 二进制是这样的 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0
  • 在 SDK 中找不到文件夹“tools”

    我在做安卓开发使用 Eclipse 我已经下载了所有必需的软件 但遇到了与中讨论的相同的问题 无法在 Eclipse 中设置 Android Target https stackoverflow com questions 6384328
  • UITableView更改标题标题颜色

    我正在设计 UITableView 的样式应用内设置工具包 http InAppSettingsKit并想要更改标题的颜色 标签Without title and Text Field应该是白色的 如何才能做到这一点 Thanks 这是一个
  • 我们可以使用 axios 的 onDownloadProgress 来加载 API 吗?

    我需要使用 axios 创建一个用于在 React 项目中加载 API 的进度条 我为此发现了 onDownloadProgress 函数 但我不知道我们是否可以使用它来获取诸如加载百分比之类的信息 或者它是否仅用于文件下载 所以我不确定我
  • 如何通过 SyliusResourceBundle 使用 Sylius 创建新模型

    我找到并成功使用了有关如何覆盖 Sylius 中现有模型的文档 但我无法利用 SyliusResourceBundle 创建一个全新的模型 我猜如果你已经了解 Symfony2 的话这很容易吗 我仍在学习 所以这就是我所拥有的 我缺少什么
  • 在 JDBC PL/SQL 块中多次使用命名参数时出错

    当使用命名参数调用 PL SQL 块时出现错误 当所有命名参数仅使用一次时 我的代码工作正常 但是当我复制标有 SQL 的 SQL 时 然后所有命名参数 以冒号开头 q 都使用了两次 现在我得到一个 SQL 异常 它说 参数名称的数量与注册
  • invoke_result获取模板成员函数的返回类型

    如何获取模板成员函数的结果类型 下面的最小示例说明了该问题 include
  • 使用 Angular JS 使图像出现在弹出窗口上

    这是我在 StackOverflow 上的第一篇文章 我正在自学 Angular 所以我是一个初学者 目前很困惑 我正在使用 Angular 创建一个网页 其中一个页面涉及一个按钮和一个弹出窗口 我想将图像放入弹出窗口中 但在实现此操作时遇
  • jQuery Deferred - 向 Deferred 合约添加回调

    我正在尝试在现有 Deferred 的状态设置为成功之前向其合约添加另一个异步调用 不要尝试用英语解释这一点 请参阅以下伪代码 when ajax url someUrl data data async true success funct
  • 用于电子邮件和文件日志记录的 Symfony2 Monolog 设置

    我想设置 Symfony2 向我发送电子邮件critical错误 但只需记录error级别错误 下面的设置可以做到这一点吗 monolog handlers main type fingers crossed action level er
  • 如何使用 swift flatMap 从数组中过滤掉选项

    我对 flatMap 有点困惑 添加到 Swift 1 2 假设我有一些可选类型的数组 例如 let possibles Int nil 1 2 3 nil nil 4 5 在 Swift 1 1 中 我会做一个过滤器 然后是一个像这样的地
  • 如何用 Scala 编写毕达哥拉斯定理?

    直角三角形斜边的平方等于另外两条边的平方和 这就是毕达哥拉斯定理 根据斜边长度 a 和 b 计算斜边的函数将返回 sqrt a a b b 问题是 您如何在 Scala 中定义这样一个函数 使其可以与实现适当方法的任何类型一起使用 对于上下
  • 编写代码以:启动 R 会话、运行 R 脚本、终止会话、重复

    我正在寻找一种简单的 设置后就忘记它 的方式 无论是作为终端中的单个参数字符串还是简单的 Java 程序 来自动执行以下操作 1 启动R会话 2 告诉 R 源 R 文件包含冗长的并行模拟代码 3 完成后终止R会话 4 开始一个新的R会话 5
  • VB6 - Lua 集成

    我想知道是否有人有任何集成 Lua 和 VB6 的技巧 我正在运行一个小型在线角色扮演游戏 添加一些脚本会很棒 嗯 这是可行的 我曾经为 Lua 5 0 2 做过 但找不到文件 在您拥有的选项中 您可以 将 Lua 封装在公开 Lua AP
  • MySQL/Postgres查询5分钟间隔数据

    我需要查询方面的帮助 假设这是表中的数据 timestamp 2010 11 16 10 30 00 2010 11 16 10 37 00 2010 11 16 10 40 00 2010 11 16 10 45 00 2010 11 1
  • 在 WatchKit 和主机 App 中使用具有不同标志的同一文件

    我试图在我的 watchkit 扩展和主机应用程序中使用相同的代码 但在主机应用程序中使用一些附加代码 在 watchkit 扩展中使用一些附加代码 为此 我在各自的目标上添加了 WATCH 和 APP swift 标志 问题是 当我在选择
  • Socket.io 不断重复连接并忽略其他事件

    我正在尝试制作一个网络应用程序 用户可以在其中互相玩环形国际象棋 这是我的 app js 在服务器上 var express require express var app express var http require http Ser