簡體   English   中英

socket.io如何從客戶端獲取參數?

[英]How does socket.io get arguments from the client?

我在服務器端有以下代碼:

var io = socket(server);

io.on('connection', function(socket){
    console.log('made socket connection with ID:', socket.id);
});

這是我的理解。

我們在服務器端創建一個套接字,並將其(實例?)傳遞給io。 然后,我們說io.on('connection'),它說監聽連接事件。 我們還向回調函數傳遞了套接字。

我不了解回調函數(套接字)部分。 我們將套接字傳遞到哪里? 在客戶端,我有這個

var socket = io.connect('http://localhost:4000');

我知道將建立連接並且它將開始偵聽,但是我們如何以及在哪里從客戶端調用該函數?

我們沒有調用回調,因此也沒有傳遞任何東西。 您不能從客戶端調用服務器端函數。

回調由JavaScript的事件循環調用(並給定參數),該事件由socket.io庫的內部觸發-更具體地,據我所知 ,在Engine.io中

Server.prototype.handshake = function (transportName, req) {
  ...
  self.emit('connection', socket);
  ...
};

這是通過Node的本機EventEmitter ,它允許您注冊事件的回調io.on('connection', function(socket) { ... }) ),並使用回調的數據發出事件self.emit('connection', socket) )。 與事件發射一起傳遞的數據是在發射器對象上為該事件注冊的任何回調接收的數據。

因此,流程大致如下:

  • 在服務器端,您為Engine.io對象上的connection事件注冊了一個回調處理程序(由Socket.io的socket函數傳遞給您)。
  • 在客戶端,您調用connect函數。 它啟動一個Websocket請求。
  • 在服務器端,Engine.io接收Websocket請求。 它創建一個socket對象來表示與該特定客戶端的connection ,然后發出connection事件,並將socket對象作為隨附數據。
  • connection事件將導致為該事件注冊的所有處理程序均被調用,並傳遞附帶的數據( socket對象),您的函數就在其中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM