我目前想知道在這種情況下什麼可能是最好的編程習慣:和的NodeJS Socket.IO:發出請求事件並得到響應,當/我應該在哪裏綁定監聽器?
假設我有客戶端連接到我的服務器。並且此客戶端請求服務器使用auth
事件和他的用戶名進行身份驗證。
socket = io();
socket.emit('auth', "John");
在這個簡單的情況下,服務器與一個auth_succeed
事件與用戶的ID響應。
io.on('connection', function(socket) {
socket.on('auth', function(username) {
socket.emit('auth_succeed', id);
}
}
所以我的問題是,當我還是應該在哪裏綁定在客戶端auth_succeed
事件監聽器? 對我來說有兩種方法:
在發射之前,我確信,響應事件總是會得到正確處理,但會導致一些意大利麪代碼。例如:
socket = io();
socket.on('auth_succeed', function(id){
//Do some post-auth stuff here
});
socket.emit('auth', "John");
或者發射之後,這會導致更乾淨的代碼,但也有可能,我再猜,誤了大事,如果sended足夠快。例如:
socket = io();
socket.emit('auth', "John");
socket.on('auth_succeed', function(id){
//Do some post-auth stuff here
});
您對這個問題有什麼想法?
所以 - 複述禪宗公約 - 「首先是意大利麪,然後是沒有意大利麪,然後是......」 - 但這沒關係?你能編輯你的迴應來證明OP的異步/同步的後果嗎? –
@ Tracker1就像在他的問題'io.on('connection',function(){...})'中的op狀態在服務器端一樣。因此客戶端的'socket.on('auth_succeed',...)'和服務器端的'socket.on('auth)'回調的綁定無關。 – agconti
這個答案似乎完全符合我所尋找的。 socket.io文檔缺乏這種細節。 [This](http://socket.io/docs/#sending-and-getting-data-(acknowledgements))可能也適合我的問題 –