更新版本(EasyRTC)后,客户端上的套接字IO套接字ID不同

时间:2017-12-23 03:16:15

标签: node.js socket.io easyrtc

我使用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/resources/js/app.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版本的工作原理与此处的演示相同http://enlargify.herokuapp.com/

我想更新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 的成功功能来返回正确的套接字ID?

1 个答案:

答案 0 :(得分:0)

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

客户端和服务器上Ids差异的原因是因为在easyrtc@1.0.15版本之前,easyrtc依赖于SocketIO的ID并将其用作EASYRTCID。这意味着socket.id和easyrtcid都可以互换引用。这就是为什么它适用于旧版本。

正如https://github.com/priologic/easyrtc/issues/185所解释的那样,他们改变了功能并根据新模式制作了EASYRTCID。由于信令服务器(socketIO)将向socket.id发出,而easyrtc在启动调用时将使用easyrtcid。因此,需要业务逻辑来通过套接字在对等体之间传递easyrtcids以便进行easryrtc调用。

除此之外,我们还需要告诉easyrtc对象使用信令服务器的套接字实例。我按照这个例子https://demo.easyrtc.com/demos/demo_instant_messaging_selfconnect.html