2009-12-13 153 views
0

直升機,Asp.Net聊天服務器端輪詢

我已經實施了一個使用Comet的聊天應用程序。 請求在服務器上「掛起」,直到新消息驅動。然後,它會使用新消息返回給客戶端,然後再次轉到服務器。

我的問題是:

爲了檢查新郵件,我查詢數據庫每600毫秒。 我執行一個簡單的查詢「SELECT ... FROM其中MESSAGEID>'+ lastMessageId。

另外,爲了維持存在,我更新數據庫很(非常)經常 與每個用戶的消息‘LastKeepAliveTime’。

的SQL Server事務日誌變得十分巨大,並且,在某一點上,我的聊天應用程序停止工作。

聊天用戶沒有註冊用戶,他們是誰可以在任何離開該頁面只是隨機的用戶時間。

謝謝 亞龍

回答

1

您可以使用通用緩存對象作爲最後的保持活動信息嗎?它似乎只有少量的信息,你可以避免大量的SQL更新。

1

這裏是如何保持事務日誌失控:http://support.microsoft.com/kb/873235

選項在那篇文章中包括:

  • 做收縮。
  • 更改日誌大小。
  • 配置自動擴展。
  • 更改恢復模型。
  • 定期備份日誌文件。

以及更多。

作爲一個附註,可能需要設置一個用戶列表以及他們最後的活動日期,並將其存儲爲應用程序狀態中的對象。以這種方式訪問​​會更快,並且可以減少頻繁使用的值。

0

從全模式事務日誌切換到簡單模式應該可以解決日誌增長問題。

但是,我還應該補充說,如果可以的話,避免輪詢通常是一個好主意,因爲它不可擴展。您可以考慮使用Service Broker或SqlDependency切換到事件驅動的模型。還有其他的方法來保持活力。