Начало работы с PeerJS

Я пробую самый простой пример, который я могу, взятый прямо с их веб-сайта. Вот весь мой html-файл с кодом, взятым точно из https://peerjs.com/index.html. :

<script src="https://unpkg.com/[email protected]/dist/peerjs.min.js"></script>
<script>
    var peer = new Peer();
    var conn = peer.connect('another-peers-id');
    // on open will be launch when you successfully connect to PeerServer
    conn.on('open', function(){
    // here you have conn.id
        conn.send('hi!');
    });
</script>

В Chrome и Edge я получаю это в консоли:

peerjs.min.js:64 GET https://0.peerjs.com/peerjs/id?ts=15956160926060.016464029424720694 net::ERR_CONNECTION_REFUSED

В Firefox я получаю это:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://0.peerjs.com/peerjs/id?ts=15956162489620.8436734374800061. (Reason: CORS request did not succeed).

Что я делаю не так?

@reyad запросил полную трассировку запросов и ответов. Вот что я вижу на вкладке сети в Firefox:Вкладка

А вот и Chrome: Вкладка

И еще немного Chrome: Дополнительно Chrome


person user12861    schedule 24.07.2020    source источник


Ответы (2)


[Примечание: было бы лучше, если бы вы могли предоставить полную трассировку запросов и ответов. Эта проблема может возникнуть по нескольким причинам. Я приведу два решения. Итак, попробуйте те. Если это не сработает, предоставьте полную трассировку запросов и ответов.]

<сильный>1. Первое решение:

Иногда этот тип ошибки возникает из-за самозаверяющего сертификата. Чтобы решить эту проблему, откройте инструменты/параметры разработчика, затем перейдите на вкладку «Сеть». Вы увидите список запросов. Выберите запрос, который не был выполнен из-за CORS (т. е. который дал вам эту Причину: запрос CORS не выполнен). Откройте его (т.е. щелкните по нему). Если ваша проблема связана с сертификатом, вы увидите следующее сообщение об ошибке:

ПРОИЗОШЛА ОШИБКА: SEC_ERROR_INADEQUATE_KEY_USAGE

Чтобы решить эту проблему, перейдите по URL-адресу, который является причиной этой проблемы, и примите сертификат вручную.

<сильный>2. Второе решение:

Проверьте запрос (который является причиной CORS) на вкладке сети инструментов/параметров разработчика (так же, как описано в 1. Первое решение). Вы найдете столбец Перенесено. Посмотрите, что написано в столбце Передано неудачного запроса. Если написано Заблокировано каким-то блокировщиком рекламы, то отключите блокировщик рекламы. Ваш запрос будет работать нормально.

[P.S.]: Эти решения предлагаются на предположениях. Надеюсь, эти работы. Если эти два не работают, предоставьте дополнительную информацию о запросах и ответах. Также проверьте это.

<сильный>3. Третье и последнее решение:

[Примечание: это решение может не решить вашу проблему напрямую, но оно даст вам альтернативное решение, а также понимание того, в чем заключается ваша проблема и как ее обойти]

Прежде чем читать приведенное ниже решение, прочтите это, чтобы понять, как Access -Control-Allow-Origin работает (это причина ошибки CORS).

Позвольте мне сначала объяснить, как работает peerjs:

PEERJS работает на основе PEER ID. Таким образом, вы должны получить некоторый PEER ID либо с PEERJS CLOUD SERVER, либо предоставить его себе в PEER CONSTRUCTOR, т. е. новый Peer (некоторый -peer-id). Peer id должен быть уникальным, потому что необходимо однозначно определять всех пользователей. Кроме того, peerjs использует этот PEER ID для отправки и получения данных от пользователя к пользователю.

Теперь вы должны знать, что вы используете PEERJS CLOUD SERVER для получения/генерации уникального идентификатора узла, который является сервером по умолчанию, который PEERJS использует, если только вы указали какой-то другой сервер для использования.

Теперь позвольте мне объяснить, почему вы столкнулись с этой проблемой:

Поскольку вы уже знаете, как работает CORS, вы, возможно, уже догадались, что https://unpkg.com/[email protected]/dist/peerjs.min.js (загруженный файл js) вызов https://0.peerjs.com для извлечения/создания новых уникальных < strong>ИДЕНТИФИКАТОР PEER. Но этот запрос от https://your.website.com не имеет Access-Control-Allow-Origin по какой-то причине, это также может быть проблемой промежуточного программного обеспечения. Таким образом, трудно сказать, где на самом деле возникает проблема. Но одно можно сказать наверняка, это не ваша вина в написании кода: D.

Я надеюсь, что все концепции, которые я изложил выше, вам ясны.

Теперь к решениям:

Альтернативный подход-1 (с использованием PEERJS CLOUD SERVER И предоставленного вами идентификатора):

При таком подходе вы должны создать свой собственный уникальный PEER ID. Таким образом, https://your.website.com не должен вызывать https://0.peerjs.com для получения уникального идентификатора узла. [Примечание: сделайте идентификатор пира достаточно большим, чтобы он всегда был уникальным, длиной не менее 64 символов]

Таким образом, вы можете избежать проблемы CORS.

Обновление:

Я только что увидел новую проблему в github, в которой говорится, что общедоступный облачный сервер peerjs теперь нестабилен или работает неправильно. Просто выдает ошибку вида: Firefox не может установить соединение с сервером по адресу wss://0.peerjs.com/peerjs?key=peerjs&id=123222589562487856955685485555&token=ocyxworx62i, а в Chrome: Ошибка при установлении соединения: net::ERR_CONNECTION_REFUSED. Подробнее см. здесь. Итак, лучше использовать свой собственный сервер (см. следующий подход).

Альтернативный подход-2 (с использованием собственного сервера peerjs):

Вы можете разместить свой собственный сервер peerjs вместо PEERJS CLOUD SERVER. Таким образом, вы можете разрешить доступ к любому / любому веб-сайту, который вы хотите. Если вы хотите узнать, как разместить сервер peerjs, посетите здесь.

[P.S.]: я изучил вопросы pearjs на github. После прочтения всех этих вопросов кажется, что лучше использовать свой собственный сервер, чем использовать облако pearjs. С каждым новым релизом peerjs возникает множество различных проблем. И в основном это связано с соединением с облаком peerjs, а также облаком peerjs, я думаю, не стабильно. Раньше они размещали его на 0.peerjs.com:9000 (небезопасно). Но теперь в 0.peerjs.com:443.

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

person reyad    schedule 28.07.2020
comment
добавил новое решение... надеюсь, оно решит вашу проблему... - person reyad; 29.07.2020

Из вашего вопроса я понимаю, что существует проблема (CORS => совместное использование ресурсов между источниками). Возможно, то, что я предлагаю, не очень интуитивно понятно.

Во-первых: загрузите https://unpkg.com/[email protected]/dist/peerjs.min.js в свой локальный каталог. а затем включите локальный код javascript в html. нравится: <script src="./peerjs.min.js"></script>

Во-вторых: вы используете var peer = new Peer();, но, пожалуйста, предоставьте дополнительный уникальный идентификатор со своей стороны. например, я просто создал случайный идентификатор и предоставил его.

Ссылка StackOverflow: https://stackoverflow.com/questions/21216758/peerjs-set-your-own-peerid#:%7E:text=1%20Answer&text=Provide%20a%20peer%20id%20когда,to%20under%20Create%20a%20peer.

var a_random_id = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(2, 10);

var peer = new Peer(a_random_id, {key: 'myapikey'}); 

В-третьих: лучше всего запустить PeerServer: собственный сервер для PeerJS.

Если вы не хотите ничего разрабатывать, просто введите несколько команд ниже.

Установите пакет глобально: $ npm install peer -g

Запустите сервер: $ peerjs --port 9000 --key peerjs --path /myapp Запустил PeerServer на ::, порт: 9000, путь: /myapp (v. 0.3.2)

Проверьте это: http://127.0.0.1:9000/myapp Он должен вернуть JSON с полями имени, описания и веб-сайта.

подробности: https://github.com/peers/peerjs-server

person subhadip pahari    schedule 04.08.2020