【问题标题】:JS + Socket.io + Heroku Problems - Socket.id problemJS + Socket.io + Heroku 问题 - Socket.id 问题
【发布时间】:2018-11-23 21:31:20
【问题描述】:

解决方案

改变

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是客户端发送的,但我认为是客户端与服务器建立连接后生成的吧?

【问题讨论】:

    标签: javascript heroku socket.io


    【解决方案1】:

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

    process.env.PORT || 5000
    

    在服务器上。听。

    正如您在问题代码中看到的那样,我发布了一个过时的代码,其中包含以下行(我的第一次尝试):

    var server = app.listen(3000);
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 2021-12-26
      • 2023-03-16
      • 2017-08-15
      • 2019-09-16
      • 1970-01-01
      • 2011-11-19
      相关资源
      最近更新 更多