2012-10-12 54 views
1

我正在Codeigniter中編寫一個需要實時功能的PHP Web應用程序。具體來說,我正在開發的兩個實時功能是實時聊天和實時通知提要。創建一個Node.js事件偵聽器,當有一個新的mysql記錄插入到表中時(For Notification Feed)

我能夠使用Node.JS和Socket.io爲站點(客戶端到客戶端)創建實時聊天,但我非常努力地研究如何創建由節點支持的通知系統(數據庫到客戶端)。

主要問題:

  1. 有沒有辦法主要有一個節點事件監聽當新的記錄被插入到MySQL數據庫?

  2. Node.js可以執行長輪詢來檢查數據庫是否有新記錄嗎?如果是這樣,那麼使用Node.js進行長時間輪詢會比更傳統的輪詢方法更有效嗎?

非常感謝你提前。任何例子將不勝感激!

+0

只是一個想法。您是否可以使用Redis的Pub/Sub消息傳遞http://redis.io/topics/pubsub來通知監聽器現在是時候收到新的通知了?您也可以在Redis中保留最新的通知,並在MySQL中維護整個存檔。 – skovalyov

+0

您可能還想研究BaaS(後端作爲服務),Firebase會證明對您非常有用。 –

回答

1

1 - 這取決於您的數據庫和您使用的語言/技術。 您可以使用MongoDB和node.js本身在db中插入記錄。

但我假設你使用mysql和php,所以你需要某種觸發器的標誌或...來通知node.js。

我的信息是很瞭解你的應用程序,它是如何工作的,但我做的是,我使用Ajax來插入記錄在數據庫中,然後我的node.js通知

function new_record() 
{ 
    $.post('<?php echo base_url(); ?>/record/add_newrecord' , {data:data} , function(res){ 

     if($.trim(res) == 'ok') 
     { 
      if (typeof io !== 'undefined') 
      { 
        var socket = io.connect('http://localhost:6666'); 
        socket.emit('new_record_ADDED' , { data : data }); 
      } 
     } 
} 

,或者你可以這樣做部分直接插入你的php腳本後插入記錄

 if (typeof io !== 'undefined') 
     { 
       var socket = io.connect('http://localhost:6666'); 
       socket.emit('new_record_ADDED' , { data : data }); 
     } 

2 - 可能沒有!

+1

我知道這是舊的,但作爲未來觀衆的一個說明,這種方法似乎是一個壞主意,因爲如果發佈請求成功,但客戶端不發送套接字事件,它可能會導致一些不同步。套接字新記錄添加事件應該在服務器端完成。 –

相關問題