你知道socket.io中connect事件和connection事件的区别吗?

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

咱们验证一下咱们的猜测.日志

交换位置:connect套connection

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

咱们想要验证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

结论

connectconnection事件功能类似,可是被触发的时间不一样.connect先于connetion.

connect是一旦有链接就被触发,而connection在链接彻底创建后才被触发.

通常直接如同官网示例那样,直接使用connection事件便可.

可是为了保持与前端的一致性,所有使用connect事件也何尝不可.

参考资料:
https://socket.io/get-started...
https://stackoverflow.com/que...

相关文章
相关标签/搜索