2009-09-30 61 views
0

大家好,我敢肯定這個問題已經被考慮甚至解決過;我只是不知道如何以及我的選擇是什麼。將非常感謝您的想法,任何有用的信息鏈接...即使你沒有實際的代碼/實施分享。非常感謝!在Web應用程序級別同時處理事件?

比方說:

  1. 我有一堆互聯網上的節點。這些可能是www瀏覽器或自定義胖客戶端應用程序。

  2. 有一個服務器(運行某些服務/應用程序),這些節點提前知道。如果有必要,節點也可以通過這個中心服務瞭解彼此。

  3. 任何節點都可以向中央服務器發送數據(比如用戶交互)。任何節點都可以將數據從中央服務器(Ajax風格)中提取出來。

現在的問題是:

如果這些節點需要與實時相互交流......

如果我需要在每個節點上顯式顯示當前服務器時間或當前本地時間(節點),或因爲會話)開始時的當前時間...

然後,我怎麼去解決服務器和節點之間的節點時鐘之間的差異,時鐘的差異,而不是的提到不可預知的溝通渠道延遲?

用例:用戶在時間T在她的節點上觸發事件。我不僅需要處理此事件(本地和服務器),還需要傳達相對於所有其他人。

我懷疑在TCP/IP協議棧的某些低級低級區域中已經存在一些時間同步協議,但是在應用層級別可用的所有協議......尤其是www級別?

回答

1

某些分佈式系統將時間責任轉移到基礎架構服務上:當您部署系統X時,您必須已經將操作系統配置爲使用一段時間來使用服務,例如NIST。只要分佈式記憶體停留在(比如說)彼此的一秒鐘或兩秒鐘內,事情就會正常工作。

在你的情況下,任意瀏覽器不能被認爲是同步的。所以當你有一個hub-spoke架構時,讓服務器成爲「Now」的守護者。當每個客戶端連接時,它會確定它相對於服務器的「localTime」。所有發送給遠程消費的時間都被歸一化爲相對於全球現在。

你說你需要精確確定事件處理的時間嗎?爲什麼?這真的很重要嗎?我可以看到,任何一個節點處理事件的順序都很有趣,但是從兩個節點的確切順序中可以推斷出什麼。

Node A processed event 76 
Node B processed event 77 
Node A Processed event 77 

Node A processed event 76 
Node A processed event 77 
Node B Processed event 77 

爲什麼會是怎麼回事? (愛因斯坦甚至可能會爭辯說,你不能保證那種相對性的知識)。

1

處理這種情況的最佳方法是始終在中央服務器上使用時間。我假設如果你的中央服務器真的是你的數據中心中的幾個服務器的集羣,那麼所有這些服務器都有同步的時鐘。你自己的觀察者的時鐘是已知的,在你的控制之下,所有的外部節點是不可預知的,不能被依賴。您應該至少能夠檢測到外部節點的時區,因此在顯示時間時將自己的時間轉換爲用戶節點的區域。

1

由於它是ajax,客戶端可以將本地時區信息(getTimezoneOffset())發送到服務器。每個服務器端進程將知道它自己的時區,並可將其轉換爲中央時區,或將自己的時區信息發送到中央服務器。如果真正的任務是協調時間,則每個過程需要以中央過程可以理解和傳播的方式實現區域設置。

相關問題