2016-06-24 53 views
2

我是socket.io的新手,並試圖找出如何發送多個消息。這裏是我工作的情況下,從一個打開的連接發出多個消息socket.io

function setupServer(server) { 
    var socketIO = require("socket.io").listen(server); 
    socketIO.sockets.on('connection', function (socket) { 
     console.log("client is connected"); 
     socket.emit('update', { progress: "starting..." }) 
    }); 
} 

我不得不從另一個方法調用setupServer(服務器)和我收到「開始......」在客戶端。

但問題是,我想發送更多/多條消息後。無法發送消息陣列,因爲我的應用程序每10毫秒就會建立一個消息字符串(在回調函數中),並且我希望在創建消息時立即發送它。

任何解決方案?是否有可能讓套接字對象引用在此函數之外重用?

+1

在您的例子還有,如果你想將消息發送給所有連接的用戶,你可以使用'socketIO.emit()'。您可以在數組中的'connection'事件中存儲對'socket'的引用。 – pay

回答

0

從socket.io文檔:http://socket.io/docs/#broadcasting-messages

播放,只需添加廣播標誌發出併發送方法調用。廣播意味着將消息發送給除啓動它的套接字以外的其他人。

function setupServer(server) { 
    var socketIO = require("socket.io").listen(server); 
    socketIO.on('connection', function (socket) { 
     console.log("client is connected"); 
     socket.emit('update', { progress: "starting..." }); 

     startBroadCastFromSocket(socket, 3); 

     socket.on('disconnect', function(){ 
      stopBroadcastFromSocket(socket); 
     }); 
    }); 

    // broadcast message to all sockets 
    setInteval(function() { 
     broadcastMessageToEveryone(socketIO, {body: 'Hello everyone (FROM SERVER)', timestamp: new Date()); 
    }, 1000); 
} 

function broadcastMessageToEveryone(io, body) { 
    io.emit('message', {body: body, timestamp: new Date()}); 
} 

function broadcastMessageFromSocket(socket, body) { 
    socket.broadcast.emit('message', {body: body, timestamp: new Date()}); 
} 

var socketIntervals = {}; 

function stopBroadcastFromSocket(socket) { 
    if(socketIntervals[socket.id]) { 
    clearInterval(socketIntervals[socket.id]); 
    } 
} 

function startBroadcastFromSocket(socket, seconds) { 
    socketIntervals[socket.id] = setInterval(function(){ 
    broadcastMessageFromSocket(socket, 'Hello!'); 
    }, seconds*1000); 
} 
相關問題