JS + Socket.io + Heroku问题-Socket.id问题

时间:2018-11-23 21:31:21

标签: javascript heroku socket.io


解决方案

更改

var server = app.listen(3000);

收件人

var server = app.listen(process.env.PORT || 5000);

我想在Heroku上部署使用JavaScript制作的游戏。

这是我的服务器:

var express = require('express');
var app = express();
var server = app.listen(3000);
var socket = require('socket.io');
var io = socket(server);
app.use(express.static('public'));

var connectedPlayers = {};

console.log("Server is running!");

io.on('connection',

function (socket) {

    socket.on('newPlayer',
        function (data) {
            console.log("New player connected - ID: " + data.id);
            connectedPlayers[socket.id] = {
                idOnline: socket.id,
                idOffline: data.id,
                x: data.w,
                y: data.h
            };
            socket.emit('allPlayers', connectedPlayers);
            socket.broadcast.emit('newPlayer', connectedPlayers[socket.id]);
        });

    socket.on('move',
        function (data) {
            connectedPlayers[socket.id].x = data.x;
            connectedPlayers[socket.id].y = data.y;
            socket.broadcast.emit('move', connectedPlayers[socket.id]);
        });

    socket.on('message',
        function (data) {
            message = {
                name: data.name,
                message: data.message,
                messageId: generateId()
            };
            socket.broadcast.emit('message', message);
        });

    socket.on('emote',
        function (data) {
            message = {
                emote: data.emote,
                id: socket.id
            }
            socket.broadcast.emit('emote', message);
        });

    socket.on('disconnect', function () {
        delete connectedPlayers[socket.id];
        io.emit('remove', socket.id);
    });

});

这项工作在本地很好,但是当我部署到heroku时,我收到此错误消息:

2018-11-23T21:04:18.009491+00:00 app[web.1]: /app/server.js:33
2018-11-23T21:04:18.009512+00:00 app[web.1]: connectedPlayers[socket.id].x = data.x;
2018-11-23T21:04:18.009514+00:00 app[web.1]: ^
2018-11-23T21:04:18.009516+00:00 app[web.1]:
2018-11-23T21:04:18.009518+00:00 app[web.1]: TypeError: Cannot set property 'x' of undefined

我知道heroku不能识别该索引处的“ connectedPlayers”数组,但是如何在本地正常工作? socket.id属性有什么问题? PS .: socket.id由客户端发送,但是我认为这是在客户端与服务器建立连接之后生成的吗?

1 个答案:

答案 0 :(得分:0)

在寻找了很多解决方案之后,我正在尝试疯狂的事情来插入:

process.env.PORT || 5000

在服务器上。

如您在问题代码中所见,我发布了一个过期的代码,其中包含以下行(我的第一次尝试):

var server = app.listen(3000);

解决方案比我想的要简单,只是将上面的代码行更改为:

var server = app.listen(process.env.PORT || 5000);