一種多方同步計時的系統和方法
【技術領域】
[0001]本發明屬于網絡同步計時技術領域,涉及網絡中多方同步計時的系統和方法。
【背景技術】
[0002]電子商務不僅可以用來幫助實物商品的銷售者和消費者達成交易,也可以幫助知識、技能、經驗的擁有者與需求者達成交易,知識交易所包含的內容可能是幫助解決一個問題,或者完成一個任務,也可能是提供某個事情的咨詢或者是教育培訓。如果知識交易內容是問題解決或任務完成,知識交易一般采用按事情結果計費的方式,即按問題解決或任務完成付費;如果是提供某個事情的咨詢或者是教育培訓,知識交易一般采用按時計費。采用按時計費的知識交易在執行過程中,知識的擁有者與知識的消費者如果通過網絡在線進行實時交流,系統需要對服務過程進行計時,計時數據將作為計時計費方式交易最終費用的主要依據。
[0003]對于知識交易的計時,有如下的要求:
[0004]1、交易過程中雙方看到計時是同步的;
[0005]2、交易結束時,交易雙方看到的計時數據是一致的;
[0006]3、交易任意一方無法在對方不知道的情況下啟動和停止計時;
[0007]4、交易方網絡中斷等情況下,計時停止;
[0008]5、交易方重新連接到計時服務器,交易計時時長為斷線前已經完成的計時時長;
[0009]現有的技術實現多方同步計時有如下方法:
[0010]1、計時服務器計時
[0011]計時服務器啟動定時器,客戶端每隔一個時間段去查詢計時服務器計時數據,查到以后顯示給用戶。
[0012]這種方式的好處是所有客戶端的計時均以計時服務器計時為主,計時服務器的計時不因某個客戶端網絡連接的中斷而受影響。
[0013]這種即時方式存在的問題是某一方網絡中斷以后,計時服務器計時還在進行,一方的計時還在累加,而中斷方計時則已經停止,導致雙方對計時長短理解不一致。
[0014]2、客戶端分別計時
[0015]以特定交易參與方計時為主,該交易參與方啟動本地計時器,每隔一段時間對計時數據累加,并向計時服務器發送和其他參與方發送計時數據。這種計時的方式能快速響應本地客戶端的啟動、停止計時的操作。但存在計時服務器記錄的計時數據與客戶端的計時數據不一致的可能;
[0016]從現有技術來看,都存在各種問題,不適合于知識交易中多方同步計時。
【發明內容】
[0017]本發明的目的是提供一種多方同步計時的系統和方法,解決了知識交易中多方同步計時的問題。
[0018]為達到上述目的,本發明采用的技術方案是:
[0019]一種多方同步計時系統,包括與計時服務器相交互的數據庫以及至少兩個用戶終端;
[0020]計時服務器向所有用戶終端發送計時心跳消息,計時服務器收到所有的計時心跳消息的響應后,向所有計時服務器發送下一次的計時心跳消息;
[0021]每個用戶終端每次收到計時心跳消息以后,向服務器發送計時心跳響應消息,顯示心跳包含的計時時長;
[0022]數據庫用于存放計時表,并存儲計時時長。
[0023]所述計時服務器中設置有用于產生計時數據的計時定時器。
[0024]所述數據庫中創建有計時表,計時表的字段包括計時號、計時時長、收到用戶計時心跳響應標記以及收到其他用戶計時心跳響應標記;計時號為每次計時的唯一識別號。
[0025]一種多方同步計時方法,包括以下步驟:
[0026]I)計時啟動
[0027]1-1)當用戶需要與其他至少一個用戶進行會話時,該用戶啟動計時,向計時服務器發送開始計時的請求,計時服務器收到開始計時請求以后,創建一次計時會話,并設置初始計時時長為0,將計時號以及計時時長記錄到數據庫中;
[0028]1-2)計時服務器啟動計時定時器;
[0029]1-3)計時服務器向其他用戶發送計時心跳消息,其他用戶將該計時心跳消息視為啟動計時的通知消息;
[0030]1-4)計時服務器收到其他用戶的計時心跳響應以后,在數據庫中對其進行標記,使其他用戶的計時標記在數據庫中的狀態為標記狀態;
[0031]2)計時停止
[0032]當用戶A需要停止計時,用戶A向計時服務器發送停止計時消息,計時服務器收到停止計時消息以后,停止計時定時器;計時定時器停止以后,不再向其他用戶發送計時心跳,其他用戶的計時停止。
[0033]所述步驟1-1)中,用戶A的計時標記在數據庫中的狀態為標記狀態,其他用戶的計時標記為清除狀態。
[0034]當計時服務器的計時定時器超時時,采用以下方法處理:
[0035]計時服務器判斷是否所有用戶的計時標記都為標記狀態,或者是否所有的用戶都收到了計時心跳消息,并且計時服務器從所有的用戶收到了計時心跳響應;如果不是所有用戶的計時標記都為標記狀態,則確定發生異常情況,有用戶沒有收到心跳,或者計時服務器沒有收到心跳響應,此時計時服務器停止計時定時器,不再下發心跳消息,所有用戶此時的計時處于停止狀態,用戶看到計時停止以后,采取相應停止會話的措施;
[0036]如果所有用戶的計時標記都為標記狀態,此時數據庫中的計時時長累加,清除所有用戶的計時標記,為下一次接收心跳響應做準備;計時服務器向所有的用戶發送計時心跳,各用戶收到計時心跳以后,顯示新的計時時長。
[0037]所述計時服務器向所有用戶發送的計時心跳中包含新的已經累加的計時時長。
[0038]所述異常情況為用戶掉線、網絡中斷或計時服務器宕機;當用戶掉線或網絡中斷時,計時服務器不能收到計時心跳響應,計時停止,計時時長保持在掉線前狀態;當計時服務器宕機時,計時服務器不再發送計時心跳,計時停止,已經計時的時長已經寫入數據庫。
[0039]當停止計時后,用戶能夠通過手動方式恢復計時。
[0040]所述手動方式恢復計時的方法如下:
[0041]用戶再次向計時服務器發送開始計時的請求,計時服務器收到開始計時請求以后,創建一次計時會話,并設置初始計時時長為上次計時數據。
[0042]與現有技術相比,本發明具有以下有益效果:
[0043]本發明通過計時服務器與用戶端的多方同步計時系統和方法,能夠實現交易方的計時保持同步累加;同時,在交易會話時,如果一方停止計時,另外一方也會立即停止;任何一方掉線,另外一方計時停止;最后,本發明通過在計時的同時,將計時數據存入數據庫中,無論何種計時中止,已經計時的數據都不會丟失。
【附圖說明】
[0044]圖1為本發明多方同步計時系統的模塊圖;
[0045]圖2為本發明計時啟動的流程圖;
[0046]圖3為本發明計時停止的流程圖;
[0047]圖4為本發明計時定時器超時的處理流程圖;
【具體實施方式】
[0048]下面結合附圖對本發明做進一步詳細描述:
[0049]參見圖1至圖4,本發明多方同步計時系統,包括與計時服務器相交互的數據庫以及至少兩個用戶終端;
[0050]計時服務器向所有用戶終端發送計時心跳消息,計時服務器收到所有的計時心跳消息的響應后,向所有計時服務器發送下一次的計時心跳消息;計時服務器中設置有用于產生計時數據的計時定時器。
[0051]每個用戶終端每次收到計時心跳消息以后,向服務器發送計時心跳相應消息,顯示心跳包含的計時時長;
[0052]數據庫用于存放計時表,并存儲計時時長。數據庫中創建有計時表,計時表的字段包括計時號、計時時長、收到用戶計時心跳響應標記以及收到其他用戶計時心跳響應標記;計時號為每次計時的唯一識別號。
[0053]本發明還公開了一種多方同步計時方法,包括以下步驟:
[0054]I)計時啟動
[0055]1-1)當用戶需要與其他至少一個用戶進行會話時,該用戶啟動計時,向計時服務器發送開始計時的請求,計時服務器收到開始計時請求以后,創建一次計時會話,并設置初始計時時長為0,將計時號以及計時時長記錄到數據庫中;用戶A的計時標記在數據庫中的狀態為標記狀態,其他用戶的計時標記為清除狀態。
[0056]1-2)計時服務器啟動計時定時器;
[0057]1-3)計時服務器向其他用戶發送計時心跳消息,其他用戶將該計時心跳消息視為啟動計時的通知消息;
[0058]1-4)計時服務器收到其他用戶的計時心跳響應以后,在數據庫中對其進行標記,使其他用戶的計時標記在數據庫中的狀態為標記狀態;
[0059]當計時服務器的計時定時器超時時,采用以下方法處理:
[0060]計時服務器判斷是否所有用戶的計時標記都為標記狀態,或者是否所有的用戶都收到了計時心跳消息,并且計時服務器從所有的用戶收到了計時心跳響應;如果不是所有用戶的計時標記都為標記狀態,則確定發生異常情況,有用