2012-03-29 267 views
0

目標:用戶將數據保存到我的mysql數據庫後,新保存的內容的JSON傳情會廣播給所有用戶。如何通過節點JS服務器向用戶廣播Json?

什麼是一些快速和骯髒的解決方案來實現這一目標?我正在使用php/mysql。有一個Socket.io的味道,並在一邊聽一個node.js服務器....

任何良好的聯繫將不勝感激。

背景-------- 經過多年的php工作,我決定跳上NodeJS班車,除了香草「Hello World」之外別無其他任何線索......這是我的出發點。再次感謝!!

回答

3

如果您想廣播到所有用戶,包括你自己,那麼你應該使用:

io.sockets.emit('global', {data: 'this will be received by everyone'}); 

如果你想播放,而無需自己所有的用戶被通知,那麼你應該使用:

socket.broadcast.emit('Hello everyone!'); 

希望這會有所幫助!

+0

謝謝您的及時答覆!我是單線玩家的忠實粉絲......我會用我的設置來測試這一點,並很快提供反饋。 – FredTheWebGuy 2012-03-29 23:08:51

+0

它應該工作,我目前正在使用它:) – 2012-03-30 02:04:52

1

您可以在此上下文中定義「廣播」的含義嗎?

是否要在網頁上顯示警報?

如果是這樣,您是否希望僅提醒當前正在您網站上查看網頁的用戶或在一段時間內訪問您網站的用戶?如果後者出現問題,您是否在乎警報是否多次出現給單個用戶?

Socket.IO是向/從遠程瀏覽器發送/接收消息的一種方式,但是沒有客戶端處理程序有一些向用戶顯示消息的方式,這種方法沒有實際意義。

我發現now.js是瀏覽器的一個更好的抽象< - >服務器的通信,如圖中這種可能的解決方案,顯示在當前用戶瀏覽網頁的警告:

第1步:安裝now.js(-g選項去掉,如果你不想現在全球的裝機量):

npm install -g now

第2步:創建一個HTTP服務器,並使其偵聽端口80上

var PORT=80, 
    http=require('http'), 
    nowjs=require('now'), 
    app=http.createServer(requestHandler).listen(PORT), // create your server 
    everyone=nowjs.initialize(app); // initialize now on your listening server 

function alertUsers(msg){ // sends msg to showAlert() callback on clients 
    everyone.now.showAlert(msg); 
} 

function requestHandler(req,res) { 
    ... 
    ... 
    /* 
    * Ok, something has happened you want to inform your currently 
    * connected users of... 
    * 
    * if the thing can happen as a result of a request, do it here 
    */ 
    var msg="Whoohoo! Something's happened!"; 
    alertUsers(msg); 
    ... 
    ... 
} 

// or if it happens somewhere else, just call alertUsers() there. 

第3步:然後在瀏覽器端HTML:


    <html> 
     <head> 
      <style type="text/css"> 
       .alert { background-color:red; color:white; font:24pt bold sans-serif; } 
       .hidden { display:hidden; visibility:none; } 
      </style> 
     </head> 
     <body> 
      <div id="alert" class="alert hidden"> 
      <div class="main-content"> 
       <!-- main page content --> 
      </div> 
      <script type="text/javascript" src="...load jQuery here..."></script> 
      <script src="/nowjs/now.js"></script> <!-- *SEE NOTE BELOW --> 
      <script type="text/javascript> 
       $(document).ready(function(){ 
        // after the document has finished loading 
        now.showAlert=function(msg){ // define your callback function 
         $('#alert').removeClass('hidden').text(msg); 
        }; 
       }); 
      </script> 
     </body> 
    </html> 

*注意<script src="/nowjs/now.js"></script>請求是魔術所引用的文件並沒有真正在該位置存在服務器端。通過在你的http服務器實例上運行nowjs.initialize(),你正在設置一些東西,這樣nowjs就會攔截/nowjs/now.js的請求,並在不調用requestHandler()的情況下將其返回給客戶端。

此外,此解決方案不會向任何在服務器發送警報後連接的人顯示警報。如果你想這樣做,你需要做一些不同的事情。

+0

非常有趣!從未聽說過這個框架。對於用戶採用什麼方法向用戶「廣播」(缺少更好的單詞)事件,我仍然處於空中。和「廣播」?我一般用這個術語......記住身份驗證或任何爵士樂。只是實時分享活動。無論如何..IF這NOW.JS框架是專門設計來做到這一點,然後我可能有相當數量的honework做! – FredTheWebGuy 2012-03-29 23:14:15