最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

运维笔记admin8浏览0评论

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

更新版本(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

发布评论

评论列表(0)

  1. 暂无评论