Node.js Socket.io предоставляет 503 услуги недоступны | WebSocket закрывается до установления соединения | Неверный запрос 400 - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь реализовать видеочат, используя WebRT C.

Веб-приложение размещено на heroku и использует node.js.

Я использовал это как ссылка.

Я думаю, что мой socket.io (v1) не работает, потому что очень простой emit уже выходит из строя

room = prompt('Enter room name:');

const socket = io.connect();

if (room !== '') {
  console.log('Joining room ' + room);
  socket.emit('create or join', room);
}

Это то, что я вижу в консоли:

enter image description here

Код на стороне сервера выглядит следующим образом:

const static = require('node-static');
const http = require('http');
const file = new(static.Server)();
const app = http.createServer(function (req, res) {
  file.serve(req, res);
}).listen(process.env.PORT || 2013);

const io = require('socket.io').listen(app);

io.sockets.on('connection', (socket) => {

  // convenience function to log server messages to the client
  function log(){
    const array = ['>>> Message from server: '];
    for (const i = 0; i < arguments.length; i++) {
      array.push(arguments[i]);
    }
      socket.emit('log', array);
  }

  socket.on('message', (message) => {
    log('Got message:', message);
    // for a real app, would be room only (not broadcast)
    socket.broadcast.emit('message', message);
  });

  socket.on('create or join', (room) => {
    const numClients = io.sockets.clients(room).length;

    log('Room ' + room + ' has ' + numClients + ' client(s)');
    log('Request to create or join room ' + room);

    if (numClients === 0){
      socket.join(room);
      socket.emit('created', room);
    } else if (numClients === 1) {
      io.sockets.in(room).emit('join', room);
      socket.join(room);
      socket.emit('joined', room);
    } else { // max two clients
      socket.emit('full', room);
    }
    socket.emit('emit(): client ' + socket.id +
      ' joined room ' + room);
    socket.broadcast.emit('broadcast(): client ' + socket.id +
      ' joined room ' + room);

  });

});

Это просто скопировать / вставить из примера Google.

Используется для запуска сервера узлов в Procfile heroku.

EDIT

В логах heroku я нашел:

/app/node_modules/socket.io-adapter/index.js:196
2020-04-03T10:20:11.034394+00:00 app[web.1]:   if (fn) process.nextTick(fn.bind(null, null, sids));
2020-04-03T10:20:11.034395+00:00 app[web.1]:                               ^
2020-04-03T10:20:11.034395+00:00 app[web.1]: 
2020-04-03T10:20:11.034396+00:00 app[web.1]: TypeError: fn.bind is not a function
2020-04-03T10:20:11.034396+00:00 app[web.1]:     at Adapter.clients (/app/node_modules/socket.io-adapter/index.js:196:31)
2020-04-03T10:20:11.034396+00:00 app[web.1]:     at Namespace.clients (/app/node_modules/socket.io/lib/namespace.js:256:16)
2020-04-03T10:20:11.034397+00:00 app[web.1]:     at Socket.<anonymous> (/app/index.js:102:35)
2020-04-03T10:20:11.034397+00:00 app[web.1]:     at Socket.emit (events.js:311:20)
2020-04-03T10:20:11.034397+00:00 app[web.1]:     at /app/node_modules/socket.io/lib/socket.js:503:12
2020-04-03T10:20:11.034398+00:00 app[web.1]:     at processTicksAndRejections (internal/process/task_queues.js:79:11)

Возможно, это вещь версии. Примеры могут быть для Socket.IO 2, но я должен использовать Socket.IO 1. Сейчас исследую это.

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