server端的socket.io
中有两个链接事件.一个是.on('connect')
,一个是.on('connection')
.前端
官网上没有对这两个事件的区别进行解释.express
那么这两个事件有什么区别呢? 使用起来彷佛没有什么差异哎?服务器
笔者就2.0.4版本的socket.io
进行实验.app
这段代码搭建起了一个最简单的socket.io服务器,监听1111端口.socket
var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); io.on('connect',function (socket) { console.log('conenct',socket.id); }); io.on('connection', function(socket){ console.log('connection',socket.id); }); http.listen(1111);
客户端链接以后,log以下:ui
conenct 8uBVxwqym7pxsJANAAAA connection 8uBVxwqym7pxsJANAAAA
能够看到,都正常地响应了链接事件.可是,咱们发现connect
事件彷佛要先于connection
事件,由于它的日志在前!socket.io
咱们验证一下咱们的猜测.日志
var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); io.on('connect',function (socket) { console.log('conenct',socket.id); io.on('connection', function(socket){ console.log('connection',socket.id); }); }); http.listen(1111);
咱们发现,输出log的顺序没有变化:code
conenct pSlSKNaabR2LBCujAAAA connection pSlSKNaabR2LBCujAAAA
这说明,connection事件在connect事件以后还能被触发.server
咱们想要验证connection事件以后,connect不能被触发.
var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); io.on('connection', function(socket){ console.log('connection',socket.id); io.on('connect',function (socket) { console.log('conenct',socket.id); }); }); http.listen(1111);
输出结果和预期相符,咱们能够发现,connection事件触发以后,connect事件没有被触发!
connection 1QCOp0Y0fuH2xG-LAAAA
connect
和connection
事件功能类似,可是被触发的时间不一样.connect
先于connetion
.
connect
是一旦有链接就被触发,而connection
在链接彻底创建后才被触发.
通常直接如同官网示例那样,直接使用connection
事件便可.
可是为了保持与前端的一致性,所有使用connect
事件也何尝不可.
参考资料:
https://socket.io/get-started...
https://stackoverflow.com/que...