2016-12-05 80 views
0

我有一個寫在jquery上的聊天應用程序。當用戶發送消息時,該消息正被髮送到Java REST端點。但我也想聽聽迴應。我認爲每秒鐘聽其他REST端點會很好,因爲我不知道如何在Facebook中實現它。所以,如果有新消息,讓他們和顯示。如何在jQuery中做到這一點?jquery/angular scheduler implementation

回答

1

有幾個解決方案,但我建議你不要使用REST創建聊天應用程序。如果你想讓純JS從谷歌(它將是實時的)/ meteor或者絕對使用Websockets考慮firebase(你需要一個websocket服務器,你可以使用authobahnjs來訂閱該服務器)。

我意識到這是解決方案,它比REST更復雜,但如果你問我,也許你的客戶REST是真的不聊天/實時應用的最佳選擇...

試想情況下,你會有很多用戶在線,他們每個人不僅會發送很多查詢(如果他們寫得很快),還會每秒鐘檢查響應。現在想想如果網絡出現問題,你的服務器會發生什麼......你會得到噸'掛'連接等。

btw。那些嘗試過它的人(如過去一樣)會告訴你相同的信息,而不是通過輪詢REST上的消息進行輪詢! ;)

JQuery的方式... 好的,只需要注意在同一個元素上定義多個事件(這是使用Jquery時的經典之一),這裏有一個函數應該做你想做的事情(它的職位,但你能適應它):

var interval = 1000; // 1000 = 1 second, 3000 = 3 seconds 
function doAjax() { 
    $.ajax({ 
      type: 'POST', 
      url: 'chatController.php', 
      data: {action: 'getMessagesForUser', user: {user: 'data'}}, 
      dataType: 'json', 
      success: function (data) { 
        //do something with results  
      }, 
      complete: function (data) { 
        // Schedule the next 
        setTimeout(doAjax, interval); 
      } 
    }); 
} 
setTimeout(doAjax, interval); 

你也可以引進一些變量,將確保你不會做出另一個請求前一個完成之前等

+0

謝謝,但問題是我已經有基於運動衫的休息聊天應用服務器,我沒有寫它,我只是想用它 – avalon

+0

然後(especia如果你對angular2有興趣,你會對Observable.interval(time)感興趣,看看這裏:http://stackoverflow.com/questions/36086596/periodically-updating-observable-value-in- angular2 - 在純JavaScript或jQuery中,您可能需要使用setTimeout函數,但我會採用角度方法... –

+0

謝謝,您認爲在穩定性/性能/可伸縮性方面它是可以接受的嗎?謝謝 – avalon