更新版本(EasyRTC)之后,客户端IO套接字IDS不同



我正在将socket.io与EasyRTC一起使用P2P视频聊天。https://github.com/merictaze/enlargify的工作示例

"express": "^4.15.2",
"easyrtc": "1.0.x", // easyrtc@1.0.15
"socket.io": "^1.4.5"

使用的EasyRTC逻辑在https://github.com/merictaze/enlargify/blob/master/public/public/resources/js/app.js

但是,如果我将EasyRTC版本提高到1.1,则代码停止工作。我什至尝试了Beta分支。

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

我知道这没有多大帮助,因此,在进一步调查中,我发现它在此通话中失败了

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

失败的错误代码是

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

但是,在package中恢复easyrtc版本。json在此处的演示中工作http://enlargify.herokuapp.com/

由于Beta分支中的Safari支持,我想更新EasyRTC版本。我发现演示可以顺利进行。

ps。我确实更新了socket.io版本,并更新了倒未经的调用,例如

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

to

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

进一步的调查表明,在客户端上生成的套接字ID与服务器上的插座不同。这就是两个同行无法连接的原因。

任何想法我如何获得 easyrtc.connect 的成功函数以返回正确的套接字?

在这里回答我自己的问题,因此,如果其他人偶然发现,他们不会像我一样浪费时间。

客户端和服务器上ID差异的原因是因为在easyrtc@1.0.15版本之前,easyrtc依靠socketio的ID并将其用作EasyRTCID。这意味着可以互换引用socket.ID和EasyRTCID。这就是为什么它在旧版本中工作的原因。

如https://github.com/priologic/easyrtc/issues/185所述,他们更改了功能,并根据新模式制作了EasyRTCID。由于信号服务器(socketio)将在启动呼叫时easyrtc发出socket.id。因此,需要业务逻辑才能通过插座之间的easyrtCID通过easyrtc调用。

除了上面,我们还需要告诉EasyRTC对象使用信号服务器的套接字实例。我遵循此示例https://demo.easyrtc.com/demos/demo_instant_messaging_meldconnect.html

最新更新