问题描述
所以我在玩socket.io尝试制作多人迷你游戏,但是我在客户端使用的socket.emit()函数不起作用。 在客户端浏览器或服务器控制台上均不会引发任何错误。 它只是不会发出事件。 也许是服务器端的socket.on()无法接收它。
有一个html文件夹,其中包含jquery.js,socket.io-1.2.0.js,index.html,main.js和style.css
这是基本的代码,但最后有一个粘贴框,其中包含完整的代码:
客户端:
const socket = io();
socket.emit('pos', player);
socket.on('pos', (pos) => {
if (player.show = true) {
canvasCtx.fillStyle = "#7c5c5c";
canvasCtx.fillRect(player.x, player.y, playerwidth, playerheight);
canvasCtx.fillStyle = "grey";
canvasCtx.fillRect(player.x, player.y + playerheight, shadow_width,
shadow_height);
}
我的画布和播放器词典工作得很好。
服务器端:
var path = require("path");
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.use(express.static('html'))
app.get('/', function(req, res){
res.sendFile(path.resolve(__dirname + '/html/index.html'));
});
io.on('connection', function(socket){
socket.on('pos', (player) => {
io.emit('pos', player);
console.log('Received player data with values : ' + player.x + ' for x '
+ player.y + ' for y '+ player.skin + 'as a skin')
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
我用npm安装express和socket.io
pastebin: :
谢谢
1楼
nireno
0
已采纳
2019-03-03 22:13:01
您不需要提供自己的socket.io客户端库副本。
初始化socket.io时,它将添加中间件以在/socket.io/socket.io.js
路径上提供socket.io.js
。
您可以在运行应用程序时访问http://localhost:3000/socket.io/socket.io.js
进行验证。
因此,在您的html中,尝试使用<script src="/socket.io/socket.io.js"></script>
<script src="socket.io-1.2.0.js"></script>
而不是<script src="socket.io-1.2.0.js"></script>
<script src="/socket.io/socket.io.js"></script>
。
这应该确保您的问题不是由socket.io的客户端版本和服务器版本之间的不匹配引起的。