Не удается заставить работать собственный сервер peerJS

Я пытаюсь реализовать простой двухсторонний видеочат во внутренней сети для своего рабочего места. Я написал код на стороне клиента, и он работает: если я подключаюсь к peerjs с помощью ключа API peerjs, соединение устанавливается правильно. Но есть проблема: видеопоток невероятно тормозит (иногда вообще зависает). Я предполагаю, что это потому, что бесплатный сервер peerjs, к которому я подключаюсь, слишком слаб, поэтому я хочу попытаться разместить его самостоятельно.

Я пробовал все способы и глубоко искал помощи, но не мог преодолеть это. Я пробовал комбинировать его с Express или просто создавать PeerServer, следуя инструкциям, которые я нашел на https://github.com/peers/peerjs-server. Я пробовал использовать простой «npm install peer», а затем «peerjs --port 9000». Я пробовал с героку. Я перепробовал все комбинации портов, путей и фрагментов кода, которые смог найти, но никак. Кроме того, я с удовольствием многое понял о peerjs, но все равно не повезло.

Может ли кто-нибудь, кто успешно запустил сервер peerjs, объяснить мне, в чем я ошибаюсь?

Вот мой минимальный код на стороне клиента (закомментированные строки - это строки, которые я пробовал безуспешно):

var name = prompt('What's your name?');

var peer = new Peer(name, { 
  host: 'https://videodesk-ennesimo.herokuapp.com/',
  port: 9000,
  //key: 'peerjs',
  //path: '/peerjs',
  //secure: true
});

peer.on('open', function(name){
  alert(name + ' connected');
});

Все отлично работает с

var peer = new Peer(name, { key: 'mypeerjsfreeapikey' });

но, как было сказано ранее, он почти заморожен. Вы можете проверить, работает ли мой одноранговый сервер, по адресу https://videodesk-ennesimo.herokuapp.com/.

Другие попытки, которые я сделал, например:

var express = require('express');
var app = express();
var ExpressPeerServer = require('peer').ExpressPeerServer;

var options = {
    debug: true,
    allow_discovery: true
}

var server = require('http').createServer(app);

app.use('/peerjs', ExpressPeerServer(server, options));
server.listen(9000, 'localhost');

с последующей модификацией клиентского кода.

Я должен подчеркнуть, что моя клиентская часть представляет собой приложение node.js, созданное с помощью Express, и что я использую самозаверяющий SSL-сертификат, потому что Google Chrome не разрешает веб-камеру при небезопасных подключениях.

Любая помощь будет полезна. Я застрял на этом с прошлой недели, и я не могу больше терять время. Тоже не знаю, что еще попробовать. Также была бы полезна рабочая альтернатива peerjs.

Большое спасибо!


person Carlo Casiglia    schedule 14.12.2017    source источник


Ответы (3)


Карло,

Прежде всего, добро пожаловать в Stack Overflow.

Peerjs необходим только при настройке соединения и не участвует в последующем видеозвонке, поэтому ваше утверждение о том, что это слабый сервер, неверно.

Если два компьютера должны соединиться, задача состоит в том, чтобы решить, как их соединить. Это то, что делает peerjs, он смотрит на возможные комбинации IP-адреса/порта, которые будут работать. Обычно он находится в облаке, так что он позволяет подключаться машинам за брандмауэрами, которые обычно не могут связаться друг с другом.

Если вы подключаетесь к локальной сети, вы можете запустить сервер peerjs в локальной сети, и он будет работать. Но это не ваша проблема, что-то вызывает проблемы с производительностью видео, возможно, что-то каким-то образом ограничивает поток.

Попробуйте подключить обе машины к одному маршрутизатору или даже создать для них частную сеть. Это убедит вас, что проблема не в peerjs. Затем вы можете решить, почему у вас плохая производительность видео.

person Mikkel    schedule 24.12.2017

Немного опоздал на вечеринку, но ваш код не работал, потому что порт, автоматически назначенный heroku, — 443, и у вас есть обратная косая черта в конце вашего адреса хоста.

Вот как я подключился к вашему серверу peerjs.

var peer = new Peer({secure: true, host: 'videodesk-ennesimo.herokuapp.com', port: 443, path: '/'});

Все еще пытаюсь заставить свой собственный сервер работать, ха-ха.

person Baptiste Martinet    schedule 15.12.2020

Основная проблема заключается в вашем клиентском коде, который вы написали...

хост: 'https://videodesk-ennesimo.herokuapp.com/',

но в случае хоста вы либо пишете

host: 'localhost' или 'your-app-name.herokuapp.com' без https или обратной косой черты в конце.

Ваш правильный код должен быть

var name = prompt('What's your name?');

var peer = new Peer(name, { 
  host: 'videodesk-ennesimo.herokuapp.com',
  port: 9000,
  secure: true
});

peer.on('open', function(name){
  alert(name + ' connected');
});

Это сработало для меня! Желаю вам удачи и счастливого кодирования.

person Akshay Khanna    schedule 18.05.2021