2014-09-28 180 views
0

服務器事件,我可以在服務器上用細繩標籤發送數據與從服務器發送數據到客戶端上socket.io

import io = require('socket.io'); 
    var sio = io.listen(server); 
    sio.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
     console.log(data); 
    }); 

外插座我可以給一個字符串只

sio.sockets.emit("keystroke"); 

有沒有一種方法可以使外部的數據在「連接」上發生,而不僅僅是一個字符串。

我想發在同一個標​​籤如「新聞」事件服務器端的JSON數據

+0

不,我不這麼認爲! – Ravi 2014-09-28 16:13:50

回答

0

當然,你只需要保存要發送或使用聊天室,你可以廣播到插座。這裏是什麼樣子,如果你保存插座,如:

import io = require('socket.io'); 
var sio = io.listen(server); 
var client; 
sio.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
     console.log(data); 
    }); 
    client = socket; 
}); 


// then, sometime later in response to some server-side event, 
// you can send to that saved socket 
client.emit("whatever", {yourData: someData, otherData: whatever}); 

當然,你可能不會保存客戶端套接字在一個變量就顯示在這裏,因爲你可能支持許多不同的客戶端的方式。你應該如何保存它取決於你想要做什麼。如果多個客戶想要在特定類型的事件中註冊興趣,那麼socket.io中內置的聊天室功能可以非常好地達到這個目的。每個客戶端都可以請求使用您自己的特定命令加入聊天室,服務器可以將它們放入聊天室,然後當事件發生時,您可以將數據廣播到聊天室,並將其發送給所有客戶端放在聊天室裏。聊天室就像socket.io圖書館爲您管理的客戶端套接字列表一樣。

如果您曾在「事件」 chatrooom所有的客戶,那麼你可以從這樣的服務器廣播給所有的客戶在聊天室:

io.to('events').emit("whateverMsg", {yourData: someData, otherData: whatever}); 
+0

這個工程。完善。它就像我=這個。我發現了另一個包含導入事件模塊的解決方案[鏈接] http://stackoverflow.com/questions/8588895/node-js-socket-io-broadcast-from-server-rather-than-from-a-specific-client。你的解決方案更加簡單。 – wetlip 2014-09-28 19:44:58

相關問題