nodejs学习-socket.io

初学nodejs,抄了几个例子,发现有些代码有些不同,看源码解决疑惑




/socket.io/socket,io.js/在哪

socket.js->module.exports = Server;

function Server(srv, opts){
  if (!(this instanceof Server)) return new Server(srv, opts);
  if ('object' == typeof srv && !srv.listen) {
    opts = srv;
    srv = null;
  }
  opts = opts || {};
  this.nsps = {};
  this.path(opts.path || '/socket.io');
  this.serveClient(false !== opts.serveClient);
  this.adapter(opts.adapter || Adapter);
  this.origins(opts.origins || '*:*');
  this.sockets = this.of('/');
  if (srv) this.attach(srv, opts);
}




API摘自Readme.md
Server()
Server(opts:object)
Server(portLNumber:opts:object)
Server(src:httpServer[,opts:object]):
opts:
serverClient:请求/socket.io/socket.io.js时返回文件
默认true:var clientSource = read(require.resolve('socket.io-client/socket.io.js'), 'utf-8')
path:var url = this._path + '/socket.io.js';  请求/socket.io/socket.io.js匹配adapter:
origin:<
function serverClient(v:boolear):同opts.serverClient
function path(v:string);同opts.path


 socket.io.js:
module.expots = lookup
exports.connect = lookup;
-> io(url) 和 io.connect(url) 效果相同

io.on("connect")

io.sockets.on("connection")

-->Server(src,opts){

..code

this.attach(src,opts);

}

-->

Server.prototype.attach = function(srv, opts){

..code

this.bind(this.eio)

return this

}

-->

Server.prototype.bind = function(engine){
  this.engine = engine;
  this.engine.on('connection', this.onconnection.bind(this));
  return this;
};

-->

Server.prototype.onconnection = function(conn){
  debug('incoming connection with id %s', conn.id);
  var client = new Client(this, conn);
  client.connect('/');
  return this;
};

-->client.connect-->namespace.add()->socket.join)-->(room)adaper.add()

-->Namespace.prototype.add

self.emit('connect', socket);
self.emit('connection', socket);


function lookup(url,opts){

...code

return io.socket(parsed,path);

}

创建socket

Manager.prototype.socket = function(nsp){

 var socket = this.nsps[nsp];
  if (!socket) {
    socket = new Socket(this, nsp);

...code

}

socket.js

function Socket(io, nsp){
  this.io = io;
  this.nsp = nsp;
  this.json = this; // compat
  this.ids = 0;
  this.acks = {};
  this.receiveBuffer = [];
  this.sendBuffer = [];
  this.connected = false;
  this.disconnected = true;
  if (this.io.autoConnect) this.open();
}

Manager.prototype.connect = function(fn){

..code

}

-->onopen()

emit('connect");...



server部分:

  var socket = require('socket.io-client')('http://localhost');
  socket.on('connect', function(){});
  socket.on('event', function(data){});
  socket.on('disconnect', function(){});



client部分:

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io('http://localhost');
  socket.on('connect', function(){});
  socket.on('event', function(data){});
  socket.on('disconnect', function(){});
</script>
 
 



//to do

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值