更新版本后客户端上的套接字 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
我正在使用 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