问题简述
最近打算尝试socket.io-p2p,结果一上来就发现官方的例子在本地就无法完成P2P连接。
详细描述
在官方的例子中,两个客户端先通过服务器广播了各自的消息(这一步我在本地可以跑通)。随后由其中一个客户决定转为P2P连接,服务器协调完成,P2P连接建立后两个客户端不经服务器直接通信。而我本地运行时,客户端代码中的如下构造函数中的回调函数没有被调用,Go private
按钮一直被禁用:
var p2psocket = new Socketiop2p(socket, opts, function () {
privateButton.disabled = false
p2psocket.emit('peer-obj', 'Hello there. I am ' + p2psocket.peerId)
})
尝试过的解决方法
方法1
强制启用Go private
按钮。在客户端1处点击Go private
后,客户端2无反应(服务器没有收到客户端1发出的go-private
事件),且之后服务器及客户端2都收不到客户端1发送的消息,而客户端2发送的消息仍通过服务器送达了客户端1。
方法2
强制启用Go private
按钮,并将客户端代码的第63行改为socket.emit('go-private', true)
,以保证服务器能够收到并转发go-private
事件。在客户端1处点击Go private
后,客户端2有反应(服务器收到并转发了客户端1发出的go-private
事件),但之后两个客户端的消息无法互达。