轻松搭建P2P的WebRTC通信:socket.io-p2p

jopen 9年前

这个模块提供一种简便和可靠的方式来搭建一个P2P的WebRTC连接并使用事件(socket.io-protocol)进行通信。

Socket.IO is used to transport signalling data and as a fallback for clients where WebRTCPeerConnectionis not supported.

How to use

Create a socket connection, pass it toP2P. On the Client:

var P2P = require('socket.io-p2p');  var io = require('socket.io-client');  var socket = io();    var p2p = new P2P(socket);    p2p.on('ready', function(){    p2p.usePeerConnection = true;    p2p.emit('peer-obj', { peerId: peerId });  })    // this event will be triggered over the socket transport   // until `usePeerConnection` is set to `true`  p2p.on('peer-msg', function(data){    console.log(data);  });

On the server, use the socket.io-p2p-server to take care of signalling. All clients who support WebRTC data connections will exchange signalling data via the default/namespace.
var server = require('http').createServer();  var io = require('socket.io')(server);  var p2p = require('socket.io-p2p-server').Server;  io.use(p2p);  server.listen(3030);

WebRTC Peer connections can also be established by exchanging signalling data witin a socket.io room. Do this by calling thep2pserver within theconnectioncallback:
var server = require('http').createServer();  var io = require('socket.io')(server);  var p2p = require('socket.io-p2p-server').Server;  server.listen(3030);    io.on('connection', function(socket){    clients[socket.id] = socket;    socket.join(roomName);    p2p(socket, null, room);  });

See chat app for full example.

API

p2psocket = new P2P(socket, opts, cb)

Create a new socket.io-p2p connection.

Theoptsobject can include options for setup of the overall socket.io-p2p connection as well as options for the individual peers - specified usingpeerOpts.

  • numClients- max number of peers each client can connect to;5by default.
  • autoUpgrade- upgrade to a p2p connection (from s.io one) when peers are ready;trueby default
  • peerOpts- object of options to be passed to underlying peers. See here for currently supported options.

cbis an optional callback. Called when connection is upgraded to a WebRTC connection.

p2psocket.on('upgrade', function (data) {})

Triggered when P2P connection is converted to a WebRTC one.

p2psocket.on('peer-error', function (data) {})

Triggered when aPeerConnectionobject errors during signalling.

Roadmap of development

  • Support for packets containing multiple binary blobs - packets can only contain one blob in this version
  • Allow a peer to act as a relay between peers that don't support PeerConnection and those that do.

PRs and issue reports are most welcome.

项目主页:http://www.open-open.com/lib/view/home/1437359671943