2013-05-01 54 views
4

下面是app.js的一部分,它與客戶端套接字連接訪問socket.on(「連接」)封閉外插座

io.sockets.on('connection', function (soc) { 
    soc.emit('news', { status: 'connected' }); 
}); 

我想要做的就是訪問連接外的SOC VAR關閉,像這樣

io.sockets.on('connection', function (soc) { 
     do something magical here so I can access soc from outside 
}); 
soc.emit('news', { status: 'connected' }); 

需要添加什麼額外的技術來存檔此結構?

回答

0

也許你可以嘗試這樣的事:

var foo; 

io.on('connection', function(soc){ 
    foo = new Foo(soc); 
}); 

function Foo (socket){ 
    this.emit = function() { 
     if(socket) 
     { 
      socket.emit('msg'); 
     } 
    } 
} 

有人連接後,您可以撥打foo.emit();

這樣的回答可以幫助你: Can't emit from method defined outside of socket connection

+1

這將只允許一個'socket.io'連接,這樣使用(因爲'connection'事件被稱爲爲每連接,每次都會覆蓋全局'foo')。可能是這裏的用例,我不知道。 – robertklep 2013-05-01 09:43:17

+0

對於多連接,您可以使用'foo'作爲數組,並在每個連接處將其中的套接字推入其中 – 2013-05-01 09:59:48

+0

並在連接完成後將其刪除:) – robertklep 2013-05-01 10:07:01

3

你需要引用您的插座IO變量在您的服務器代碼中:

io.sockets.emit('news', { status: 'connected' });

所以在你的示例代碼,它可能是這個樣子:

io.sockets.on('connection', function (soc) { 
    emit(); 
}); 

function emit(){ 
    io.sockets.emit('news', { status: 'connected' }); 
}