你知道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...

相關文章
相關標籤/搜索