2017-12-23 5 views
0

easyrtc와 socket.io를 사용하여 P2P 화상 채팅을하고 있습니다. 내가 코드가 작동을 멈 춥니 다 1.1 easyrtc 버전을 충돌하는 경우 다음과 같은 패키지 버전버전 (EasyRTC)을 업데이트 한 후 클라이언트의 소켓 IO 소켓 ID가 다릅니다

"express": "^4.15.2", 
"easyrtc": "1.0.x", // [email protected] 
"socket.io": "^1.4.5" 

사용 easyrtc 논리 https://github.com/merictaze/enlargify에서 예를 작업, 그러나 https://github.com/merictaze/enlargify/blob/master/public/resources/js/app.js

이다. 심지어 베타 버전을 사용해 봤습니다.

"express": "^4.15.2", 
"easyrtc": "priologic/easyrtc#beta", 
"socket.io": "^1.4.5" 

내가 추가 조사에 내가 그것을이 호출에 실패 발견, 그래서이 훨씬 도움이되지 알고

easyrtc.call(self.partnerId, successCB, failureCB, acceptedCB); 

failureCB에서 오류 코드

MSG_REJECT_TARGET_EASYRTCID

입니다

서버 쪽에서 로그가 표시됩니다.

2017-12-07T07:02:40.477Z - debug - EasyRTC: [enlargify_app][fNhseVCWzi8XXhn5] EasyRTC command received with msgType [offer] undefined 
2017-12-07T07:02:40.478Z - warning - EasyRTC: Attempt to request non-existent connection key: '0xv7UpIAlVeAzEedAAAA' undefined 
2017-12-07T07:02:40.479Z - warning - EasyRTC: [enlargify_app][fNhseVCWzi8XXhn5] Could not send WebRTC signal to client [0xv7UpIAlVeAzEedAAAA]. They may no longer be online. undefined 
이 여기 http://enlargify.herokuapp.com/

나는 때문에 베타 지점에서 사파리 지원 easyrtc 버전을 업데이트 할 데모에처럼 6,

그러나, package.json에 다시 easyrtc 버전을 되 돌리는 것은 작동합니다. 데모가 원활하게 작동하는 것을 발견했습니다.

ps. 나는 사용되지 않는 호출이 클라이언트 측에서 생성 된 socket.id이 서버의 것과 다른 것을 보여

io.to(socket.partnerId).emit("disconnect_partner", socket.id); 

또한 조사에

partnerSocket = io.sockets.socket(socket.partnerId); 
partnerSocket.emit("disconnect_partner", socket.id); 

을 예컨대 socket.io 버전을 업데이트했고 업데이트되었습니다. 그래서 두 동료가 연결할 수 없습니다.

어떻게하면 성공 함수를 얻을 수 있습니까? easyrtc.connect 올바른 socketID를 반환 하시겠습니까?

답변

0

여기에 내 자신의 질문에 대답하면 다른 사람이이 문제에 걸려 넘어지면 나처럼 시간을 낭비하지 않을 것입니다.

클라이언트와 서버의 ID가 다른 이유는 [email protected] 이전 버전에서 easyrtc가 SocketIO의 ID를 사용하고이를 EASYRTCID로 사용했기 때문입니다. 즉, socket.id와 easyrtcid는 서로 바꿔서 참조 할 수 있습니다. 그래서 이전 버전에서 작동했습니다.

https://github.com/priologic/easyrtc/issues/185에서 설명한 것처럼 그들은 기능을 변경하고 새로운 패턴을 기반으로 EASYRTCID를 만들었습니다. 시그널링 서버 (socketIO)는 socket.id로 방출되므로 easyrtc는 통화를 시작할 때 easyrtcid를 사용합니다. 따라서 easryrtc 호출을 만들기 위해 소켓을 통해 피어간에 easyrtcids를 전달하려면 비즈니스 로직이 필요합니다.

또한 신호 서버의 소켓 인스턴스를 사용하도록 easyrtc 객체에 알릴 필요가 있습니다. 나는이 예를 따랐다 https://demo.easyrtc.com/demos/demo_instant_messaging_selfconnect.html