我正在尝试制作一个用户可以互相玩象棋的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时,终端会反复显示“客户端已连接到服务器”,每秒多次,如下所示:< / p>
此外,每当我从浏览器移动或移动到另一个页面时,服务器似乎都没有注册这些事件(它没有记录“客户端已与服务器断开连接”,也没有记录已经采取行动)。我做错了什么?
答案 0 :(得分:3)
好的,看来你在服务器上运行socket.io v2.0.4,在客户端运行v1.2.0。如果版本号不匹配,可能会导致您看到的行为实际上无法正常连接,从而导致立即尝试重新连接,并且它永远不会停止这样做。
您可以在客户端中直接从服务器获取正确的版本:
style="backgroud:url(img path) no-repeat"
socket.io服务器具有<script src="/socket.io/socket.io.js"></script>
的预构建路由处理程序,当该请求进入时,它将自动从node_modules目录中提供正确匹配的客户端版本。
如果您希望客户端来自CDN,那么您需要获得与服务器版本完全匹配的CDN版本,并且无论何时升级服务器版本,都必须修复CDN版本以匹配。