WebRTC源码研究(21)WebRTC信令服务器实现

WebRTC源码研究(21)WebRTC信令服务器实现

1. 信令服务器通信流程

2. 信令服务器server

如果没有安装socket.io ,执行下面命令安装一下:

npm install --save socket.io http https express serve-index log4js

socket.js 的内容如下:

 
/**
 * Module dependencies.
 */
 
var Emitter = require('events').EventEmitter;
var parser = require('socket.io-parser');
var url = require('url');
var debug = require('debug')('socket.io:socket');
var assign = require('object-assign');
 
/**
 * Module exports.
 */
 
module.exports = exports = Socket;
 
/**
 * Blacklisted events.
 *
 * @api public
 */
 
exports.events = [
  'error',
  'connect',
  'disconnect',
  'disconnecting',
  'newListener',
  'removeListener'
];
 
/**
 * Flags.
 *
 * @api private
 */
 
var flags = [
  'json',
  'volatile',
  'broadcast'
];
 
/**
 * `EventEmitter#emit` reference.
 */
 
var emit = Emitter.prototype.emit;
 
/**
 * Interface to a `Client` for a given `Namespace`.
 *
 * @param {Namespace} nsp
 * @param {Client} client
 * @api public
 */
 
function Socket(nsp, client, query){
   
  this.nsp = nsp;
  this.server = nsp.server;
  this.adapter = this.nsp.adapter;
  this.id = nsp.name !== '/' ? nsp.name + '#' + client.id : client.id;
  this.client = client;
  this.conn = client.conn;
  this.rooms = {
   };
  this.acks = {
   };
  this.connected = true;
  this.disconnected = false;
  this.handshake = this.buildHandshake(query);
  this.fns = [];
  this.flags = {
   };
  this._rooms = [];
}
 
/**
 * Inherits from `EventEmitter`.
 */
 
Socket.prototype.__proto__ = Emitter.prototype;
 
/**
 * Apply flags from `Socket`.
 */
 
flags.forEach(function(flag){
   
  Object.defineProperty(Socket.prototype, flag, {
   
    get: function() {
   
      this.flags[flag] = true;
      return this;
    }
  });
});
 
/**
 * `request` engine.io shortcut.
 *
 * @api public
 */
 
Object.defineProperty(Socket.prototype, 'request', {
   
  get: function() {
   
    return this.conn.request;
  }
});
 
/**
 * Builds the `handshake` BC object
 *
 * @api private
 */
 
Socket.prototype.buildHandshake = function(query){
   
  var self = this;
  function buildQuery(){
   
    var requestQuery = url.parse(self.request.url, true).query;
    //if socket-specific query exist, replace query strings in requestQuery
    return assign({
   }, query, requestQuery);
  }
  return {
   
    headers: this.request.headers,
    time: (new Date) + '',
    address: this.conn.remoteAddress,
    xdomain: !!this.request.headers.origin,
    secure: !!this.request.connection.encrypted,
    issued: +(new Date),
    url: this.request.url,
    query: buildQuery()
  };
};
 
/**
 * Emits to this client.
 *
 * @return {Socket} self
 * @api public
 */
 
Socket.prototype.emit = function(ev){
   
  if (~exports.events.indexOf(ev)) {
   
    emit.apply(this, arguments);
    return this;
  }
 
  var args = Array.prototype.slice.call(arguments);
  var packet = {
   
    type
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值