2017-05-05 54 views
-1

在socket.io的官方站點中,我有一個代碼示例,我的疑問是,emit函數將爲所有客戶端發出事件,還是僅爲在服務器中連接的客戶端發送事件?示例代碼:socket io的emit函數是如何工作的?

服務器(app.js):

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 

server.listen(80); 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

io.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

客戶端(瀏覽次數index.html):

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 
+1

這是每個連接完成的。到服務器的每個連接都會創建一個傳入回調的套接字對象。 – raina77ow

+0

你可以參考這個答案所有不同的答案, [Check out](http://stackoverflow.com/questions/10058226/send-response-to-all-clients-except-sender-socket-io#answer-10099325 ) –

回答

3

信號發送的功能會發出事件的所有客戶端,或只是對於在服務器上連接的客戶端?

在服務器上的代碼示例:

socket.emit(...)會發出一個信息只向特定的連接。

io.emit(...)將向所有當前連接的客戶端發送消息。

記住io.emit()沒有任何神奇的力量,它只是遍歷當前所有連接的客戶端,併爲每一個單獨使用其特定socket對象調用socket.emit() - 因此您不必親自編寫代碼的工作。

從客戶端,socket.emit()將發送消息到服務器。

+0

非常感謝你,現在對我更加清楚! –