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

Socket IO socket ids different on client after updating version (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,代码将ps 正常工作。我什至尝试过 beta 分支。

"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/

由于 beta 分支中的 safari 支持,我想更新 easyrtc 版本。我发现演示工作顺利。

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与服务器生成的不同。这就是两个对等点无法连接的原因。

知道如何将 easyrtc.connect 的成功函数转换为 return 正确的 socketID 吗?

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

客户端和服务端的Id不同的原因是因为在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对象使用信令服务器的socket实例。我按照这个例子 https://demo.easyrtc.com/demos/demo_instant_messaging_selfconnect.html