簡體   English   中英

Socket.io傳遞回調函數

[英]Socket.io passing callback functions

我對這種情況下發生的事情感到困惑

客戶:

socket.emit('ferret', 'tobi', function (data) {
  console.log(data); // data will be 'woot'
});

服務器:

io.on('connection', function (socket) {
    socket.on('ferret', function (name, fn) {
      fn('woot');
    });   
});

這是來自文檔。 如何將函數傳遞給服務器以進行回調? 服務器如何調用客戶端功能? 我很困擾。

很明顯,您無法直接從服務器調用客戶端上的函數。

不過,您可以間接輕松地執行此操作:

  1. 當客戶端發送ferret消息時,它會在本地存儲給定的功能ID。
  2. 客戶端將此ID與消息一起發送到服務器。
  3. 當服務器想要調用客戶端函數時,它會發送一條帶有ID和函數參數的特殊消息。
  4. 當客戶端收到此特殊消息時,它可以通過其ID查找該函數並調用它。

我不知道這是否與Socket.io完全相同,但可以合理地假設它與此類似。


編輯:查看源代碼( 這里這里 ),這確實看起來確實是Socket.io所做的。

emit方法的第三個參數接受一個將被傳遞給服務器的回調,以便您可以使用您希望的任何數據進行確認。 它實際上非常方便,節省了配對呼叫響應事件的工作量。

確認是獲取與已發送消息相對應的響應的方法。 以下是服務器端的代碼片段。

io.sockets.on('connection', function(socket) {
  socket.on('echo', function(data, callback) {
    callback(data);
  });
});

暫無
暫無

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

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