【发布时间】:2018-06-12 16:05:36
【问题描述】:
我正在尝试制作一个 web 应用程序,用户可以在其中互相下环形国际象棋。这是我的 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 时,终端每秒多次重复显示“客户端已连接到服务器”,如下所示:
此外,每当我从浏览器移动或移动到另一个页面时,服务器似乎没有注册这些事件(它没有记录“客户端已与服务器断开连接”,也没有记录已采取行动)。我做错了什么?
【问题讨论】:
-
我最后一次看到这种行为是因为socket.io的客户端和服务器版本不匹配。您在客户端和服务器上运行什么版本的 socket.io?您如何加载客户端 socket.io 代码?
-
我对这些技术几乎一无所知,所以如果我说了什么非常错误或愚蠢的话,请原谅。所以
-
@jfriend00 当我在终端输入“npm list socket.io”时,它显示“toroidal@1.0.0 /Users/Ryan/Desktop/Projects/Webapps/Toroidal └── socket.io @2.0.4",所以我认为这意味着我在服务器端运行版本 2.0.4。对于客户端 socket.io,我有
-
直接来自 node_modules 目录。
标签: javascript node.js express socket.io