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...