更新版本(EasyRTC)后客户端上的套接字IO套接字ID不同
我正在使用socket.io和easyrtc进行p2p视频聊天。
"express": "^4.15.2",
"easyrtc": "1.0.x", // [email protected]
"socket.io": "^1.4.5"
使用的easyrtc逻辑是在.js
但是,如果我将easyrtc版本提升到1.1代码停止工作。我甚至试过了测试分支。
"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
但是,在package.json中恢复easyrtc版本的工作原理与此处的演示相同/
我想更新easyrtc版本,因为beta分支中的safari支持。我发现演示工作顺利。
PS。我确实更新了socket.io版本并更新了不推荐的调用,例如
partnerSocket = io.sockets.socket(socket.partnerId);
partnerSocket.emit("disconnect_partner", socket.id);
至
io.to(socket.partnerId).emit("disconnect_partner", socket.id);
进一步的调查表明,客户端生成的socket.id与服务器端的socket.id不同。这就是两个同行无法连接的原因。
知道如何获得easyrtc.connect的成功函数来返回正确的socketID吗?
回答如下:在这里回答我自己的问题,如果其他人偶然发现这一点,他们就不会像我一样浪费时间。
客户端和服务器上Ids差异的原因是因为在[email protected]版本之前,easyrtc依赖于SocketIO的ID并将其用作EASYRTCID。这意味着socket.id和easyrtcid都可以互换引用。这就是为什么它适用于旧版本。
正如在https://github/priologic/easyrtc/issues/185所解释的那样,他们改变了功能,并根据新模式制作了EASYRTCID。由于信令服务器(socketIO)将向socket.id发出,而easyrtc在启动调用时将使用easyrtcid。因此,需要业务逻辑来通过套接字在对等体之间传递easyrtcids以便进行easryrtc调用。
除此之外,我们还需要告诉easyrtc对象使用信令服务器的套接字实例。我按照这个例子https://demo.easyrtc/demos/demo_instant_messaging_selfconnect.html