尝试了我可以找到的其他解决方案,例如添加process.env.PORT,还查看了有关socket.io的heroku指南。
Phaser.io游戏我的小组正在本地完美地工作,但是当我们部署到heroku时,有一个错误,只有第一个连接的玩家才会看到其他玩家,并且只有短暂的时刻。在那么短的时间之后,球员们就会冻结。
我的问题是,有没有人知道可能导致问题的原因是什么?我们的socket.io实现有问题吗?
提前感谢您的帮助。对导致这个问题的原因极为困惑。
以下是部署版本:https://death-road-to-toronto.herokuapp.com/
以下是您的回复:https://github.com/Road-To-Capstone/CapstoneMultiplayer/
以下是与socket和express相关的代码片段 Index.js
const config = require('./config');
const express = require('express');
const socketio = require('socket.io');
const http = require('http');
const app = express();
const server = http.createServer(app);
const io = socketio(server);
app.use('/', express.static(config.publicDir));
//-socket
const players = require('./players.js');
const missiles = require('./missiles.js');
const zombies = require('./zombies.js');
io.on('connection', socket => {
-------
});
//=socket
server.listen(process.env.PORT || config.port, () => {
console.log(`Listening on ${config.port}`);
});
//creating new zombie id
function newZombieId() {
let id = new Date();
return id.getTime();
}
config.js
const path = require('path');
module.exports = {
port: 3000,
publicDir: path.join(__dirname, '../public'),
game: {
start: {
x: 400,
y: 400
}
}
}
EDIT1 :我在玩socket.io和heroku时发现了一个有趣的发现。因此,如果我将另一台计算机连接到heroku上的已部署版本,则单击控制台(仅冻结游戏)。任何人都可以加入,一切都很完美,就像本地副本一样。
有谁知道为什么?如果不是我可以做什么作为一种解决方法?也许实施一个大厅系统,允许所有玩家同时加入和开始?
答案 0 :(得分:0)
解决了我的问题!为了繁荣,我想留下我的问题和解决方案,其他人想要在Heroku上使用Phaser和socket.io实现多人游戏,并遇到问题。
我们将此添加到index.html文件</script type ="text/javascript" src="/socket.io/socket.io.js"> </script>
,该文件允许heroku访问套接字库。
这实际上不是socket.io的设置问题,这是我们的逻辑。当玩家检测到移动时,它会立即尝试socket.broadcast玩家移动。但是,当其他玩家首次连接时,他们没有时间从服务器端检索所有玩家信息。因此,广播将导致“播放器”未定义的错误。添加条件语句解决了我们的问题。
如果你想进一步调查,那么整个代码将留在github上。