JS Socket.IO 發送消息


前言

在網上看到有人總結的 JS 的 Socket.IO 庫發送消息的相關資料,覺得很不錯,在這里做下整理與轉載。

Socket.IO 發送消息的不同含義

 

  ...

  // 給本次連接的客戶端發消息
  socket.emit('hello', 'can you hear me?', 1, 2, 'abc');

  // 給除了本次連接的其他所有連接者發消息
  socket.broadcast.emit('broadcast', 'hello friends!');

  // 給除了本次連接者之外的所有game房間的人發消息
  socket.to('game').emit('nice game', "let's play a game");

  //給除了本次連接者之外的所有game1、game2房間的人發消息
  socket.to('game1').to('game2').emit('nice game', "let's play a game (too)");

  // 給所有game中的人發消息
  io.in('game').emit('big-announcement', 'the game will start soon');

  // 給myNamespace命名空間的所有人發消息
  io.of('myNamespace').emit('bigger-announcement', 'the tournament will start soon');

  //給特定的socketid發消息(私信)
  socket.to(<socketid>).emit('hey', 'I just met you');

  // 發送需要回執的消息
  socket.emit('question', 'do you think so?', function (answer) {});

  // 發送無需壓縮的消息
  socket.compress(false).emit('uncompressed', "that's rough");

  // sending a message that might be dropped if the client is not ready to receive messages
  socket.volatile.emit('maybe', 'do you really need it?');

  // sending to all clients on this node (when using multiple nodes)
  io.local.emit('hi', 'my lovely babies');

  ...

Socket.IO服務端消息與客戶端對應的處理方法

  • case 1

    發送 action 命令,命令是字符串的。代碼如下:

    socket.emit('action'); 
    

    在另一端接收時,可以寫成:

    socket.on('action',function(){...});
    
  • case 2

    送了一個action命令,還有data數據。代碼如下:

    socket.emit('action', data);
    

    在另一端接收時,可以寫成:

    socket.on('action',function(data){...});
    
  • case 3

    發送了action命令,還有兩個數據,代碼如下:

    socket.emit(action,arg1,arg2); 
    

    在另一端接收時,可以寫成:

    socket.on('action',function(arg1,arg2){...});
    
  • case 4

    在emit方法中包含回調函數,例如:

    socket.emit('action',data, function(arg1,arg2){...} );
    

    這里的回調函數也可以在另一端調用,另一端可以寫成:

    socket.on('action',function(data,fn){   fn('a','b') ; });
    

上面的data數據可以有0個或者多個,相應的,在另一端改變function中參數的個數即可,即使參數個數與發送端的data個數一一對應。另外,function中的參數個數和順序應該和發送時保持一致。

對於上面最后一個case,fn是一個特別的參數,其特別處是它本身是一個函數,fn相當於執行了回調函數。需要特別注意的是,一次發送不應該寫多個回調函數,否則只有最后一個有效。而且回調應作為最后一個參數。

參考

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM