使用socket.io和Node.js的应用程序在本地工作但未部署到heroku

时间:2018-02-02 07:05:28

标签: node.js heroku socket.io multiplayer phaser-framework

尝试了我可以找到的其他解决方案,例如添加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上的已部署版本,则单击控制台(仅冻结游戏)。任何人都可以加入,一切都很完美,就像本地副本一样。

有谁知道为什么?如果不是我可以做什么作为一种解决方法?也许实施一个大厅系统,允许所有玩家同时加入和开始?

1 个答案:

答案 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上。