Текстовый чат PeerJS

В настоящее время я пишу веб-чат-клиент, в котором два человека случайным образом соединяются друг с другом и попадают в чат вместе без каких-либо подсказок.

Я использую библиотеку PeerJS, так как считаю ее наиболее понятной для себя. Однако я нахожусь в затруднительном положении: я не уверен, как на самом деле реализовать текстовый чат.

Я просмотрел их пример на их сайте (здесь) и немного изменил код. работать на меня (в основном, как это выглядит и каковы некоторые результаты).

Проблема, с которой я столкнулся, заключается в том, что их код требует, чтобы два человека ввели идентификатор другого вручную, и чат не запустится без подтверждения обоих людей (это означает, что они оба должны ввести идентификатор и нажать кнопку «Подключиться»).

Ниже приведен код, который я пробежался по голове, пытаясь разобраться:

Сначала я должен прослушать соединение с PeerJS:

myPeer.on("connection", function() {...});

Но в то же время я хочу прослушивать открытие соединения на том же клиенте, так как я не хочу запрашивать у пользователей идентификаторы друг друга:

myConn.on("open", function() {...})

Но это невозможно (насколько мне известно), так как я не могу знать, что будет myConn, пока не открою соединение с прослушивателем myPeer выше.

Моя проблема в том, что я не знаю, как сделать это одновременно. Если это вообще поможет, я пытаюсь сделать видеочат вместе с этим, что я все понял, поэтому, если бы я мог каким-то образом использовать это соединение или что-то еще, это тоже сработает. У меня есть полный контроль над проектом, поэтому я могу делать все, что захочу (включая переключение библиотек, если они проще в использовании или более развиты).


person Milo Gertjejansen    schedule 04.01.2014    source источник
comment
Вы нашли способ поделиться идентификаторами   -  person Muhammad Umer    schedule 11.10.2014


Ответы (1)


событие connection дает вам экземпляр DataConnection.

Рассмотрим следующий код на принимающей стороне:

var peer = new Peer('clientID');
peer.on('connection', function(con){
    con.on('data', function(data){
        console.log('Incoming data', data);
        con.send('REPLY');
    });
});

Теперь используйте этот код на отправляющей стороне:

var peer = new Peer();
var con = peer.connect('clientID');
con.on('data', function(data){ ... });
con.send('HELLO WORLD');

Перед отправкой сообщений важно дождаться открытия соединений. Для вышеизложенного вы можете использовать con.on('open', function(){ ... });

DataConnections ведут себя аналогично сокетам TCP. Если вам нужна двусторонняя связь, вы можете использовать 2 сокета от 2 узлов. Поскольку этому вопросу уже несколько месяцев, я пока оставляю решение с двойным сокетом. Дайте мне знать, если вам это все еще нужно.

person Community    schedule 26.02.2014
comment
Айвенго, а если я хочу отправлять сообщения и файлы в том же чате. Я просматривал github.com/peers/peerjs/blob/master/ examples/chat.html, но эта реализация мне не подошла. Любая помощь будет оценена!! - person Moh; 10.06.2015
comment
Извините, Мох, я недавно перешел на SimpleWebRTC и signalmaster. У меня было бы несколько подключений для передачи данных, одно для файлов и одно для чата. - person ; 12.06.2015
comment
Наконец-то у меня что-то работает, но я предполагаю, что это неправильный путь, потому что я создаю новое соединение каждый раз, когда хочу отправить текст или файл. Я попытался создать только два соединения, как вы предложили, но не смог этого сделать. Не могли бы вы дать несколько советов, как это решить? Это мой код github.com/simo163/webrtc/blob/ apprtc/приложение/контроллеры/ - person Moh; 15.06.2015
comment
Итак, peer.on(connection, f) срабатывает при каждом сообщении? Если да, то почему бы не сохранить состояние следующим образом: peer.on(connection, function(c){ if(chatConnected!==null) return; chatConnected = c; ... - person ; 17.06.2015