Почему я получаю эту ошибку в Node.js для моей онлайн-игры? - PullRequest
0 голосов
/ 28 февраля 2019

Я создал многопользовательскую онлайн-игру, где бэкэнд - это nodejs, и иногда, когда люди тестируют его, спамят пули или используют сценарий для создания большого количества игроков, я получаю сообщение об ошибке.У меня есть ограничения для этого, поэтому в игре может быть только 500 пуль и 20 игроков, и все они в конечном итоге исчезают, но даже когда это не позволяет людям создавать слишком много пуль / игроков, когда они пытаются, я получаю этоошибка:

zlib.js:499
      var newReq = self._handle.write(flushFlag,
                                ^

TypeError: Cannot read property 'write' of null
    at Zlib.callback (zlib.js:499:33)

Я использую socket.io с экспресс.В моем коде нет ничего общего с zlib, и это единственные npm-зависимости, которые я использую.

A очень сокращенная версия кода, который я использую (который в идеале долженне были переданы в любой форме):

//Dependencies
var express = require("express");
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var fs = require('fs');

/* a bunch of vars + config */

//Express
server.listen(7654);

//Some functions

//Socket.io Listeners
io.on('connection', function(socket) {

  //Declare Player
  socket.on("declare player", function (data) {
    if (Object.keys(players).length > maxPlayers) return; //Make sure no more than 20 players
    //If statements to check valid data was sent
    var playerdata = {
      //Player Data
    };

    //Referral code stuff

    //Secret Names
    switch (playerdata.name) {
      //Secret player codes for powerups
    }

    playerSecrets[data.id] = data.secret;
    players[data.id] = playerdata;
  });

  //Player Action
  socket.on("player action", function (data) {
    /* Player controls input, mostly redacted */
    switch (data.action.command) {
      case "shoot": //Shoot Bullet
        players[data.id].score--;
        if (bullets.length > maxBullets) return; //Maximum Bullets in Arena (500)
        bullets.push({/*bullet data*/});
        break;
    }
  });

});

//Kill Player
function kill(playerid) {
  delete players[playerid];
  delete playerSecrets[playerid];
}

//Generate stars

//Game loop
setInterval(function () {
  //Emit gamedata to clients
  io.emit("gamedata", {
    players: players,
    stars: stars,
    bullets: bullets,
    referrals: referralData
  });

  //For each player
  for (var i = 0; i < Object.keys(players).length; i++) {
    //Redacted
  }

  //For each bullet
  for (var i = 0; i < bullets.length; i++) {
    //Redacted
  }
}, 1000 / tickSpeed);

Интересно, связано ли это с вещами, добавляемыми в JSON / Arrays, потому что это то, что происходит, когда игрок создается, пуля попадает, и спамэти причины, чтобы это произошло.См socket.on("player action" и socket.on("declare player".

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

У меня были те же проблемы на Ubuntu.Но при запуске кода на моем Mac не было ошибок / ошибок.

Оказалось, что я забыл подтвердить версию Node, работающую в Ubuntu.Оказалось, V8.x является последней версией NodeJS в репозиториях Ubuntu.После того, как я установил LTS с NVM, ошибка / ошибка немедленно исчезла и в Ubuntu.

Для тех, кто мог совершить эту же ошибку, сначала проверьте вашу версию Node.

0 голосов
/ 15 марта 2019

У нас была та же проблема в те же сроки.Мы полностью просмотрели наши зависимости для всех применений библиотеки базовых узлов zlib ... и обнаружили, что единственной, которая изменилась в нашем списке dep с момента обнаружения проблемы, был модуль узла "ws".Это зависимость engine.io, которая, в свою очередь, является зависимостью socket.io.https://github.com/socketio/engine.io/pull/564/commits/6a47059eb8164cdf4c6537a7fef6829c90a398f7 ^ boom, engine.io столкнулся с 3 основными версиями и выпустил только минорную версию.Таким образом, вы подняли это, если вы столкнулись с socket.io 2.1.1 -> 2.2.0.Это потому, что между этими версиями они столкнулись со своим engine.io dep, чтобы указать на последнюю минорную версию: https://github.com/socketio/socket.io/commit/190d22b46e3c2ed18413458a2106322f8bac99f5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...