繁体   English   中英

Socket.io反复连接并忽略其他事件

[英]Socket.io keeps connecting repeatedly and ignores other events

我正在尝试制作一个用户可以互相玩象棋的webapp。 这是我的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);

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

终端截图

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

好的,看来你在服务器上运行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版本以匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM