之間的對話,我面臨着這樣的局面:同步當前消息ID在Alice和Bob
主機一個和乙在交談通過經紀人交換消息。
當主機乙接收消息發送回一個傳送令牌到主機甲,以便它可以表明乙已收到他的消息的用戶。 這也可能發生另一種情況。
在任何時候一個或乙可能處於脫機狀態和經紀人將舉行的消息,直到他們來到網上,然後拯救他們。
每個主機存儲它自己,並在數據庫表中的其他主機的消息:
ID | From | To | Msg | Type | Uid
我用天真的表的主鍵ID將是一個不錯的選擇,以確定消息(因爲它是依賴於想通插入順序),所以我定義了一個自定義的唯一ID字段(uid)。
我的問題是:
我怎樣才能確保目前的消息ID 保持同步主機A和B之間,使得只有一個消息有ID?因此,我可以使用交付令牌標識來識別收到的消息,如果我擁有多個具有相同ID的消息,則不可能。
如果我這樣做,我們每次發送/時間天真地增加它起初它看起來不錯收到一條消息:
Host A sends message with ID 1 and increases it's current ID to 2
Host B receives a message and increases it's current ID to 2
Host B sends message with ID 2 and increases it's current ID to 3
Host A receives message and increases it's current ID to 3
...
但它可以很容易地突破:
Host A sends message with ID 1 and increases it's current ID to 2
Host B sends a message (before receiving the previous one) with ID 1
clash.. two messages with ID 1 received by both hosts
我認爲發生的每次都有一個很大的UUID(碰撞的可能性極低),但是由於每條消息都需要攜帶和存儲,所以會帶來很大的開銷。
不幸的是,任何關於經紀人的解決方案都不可行,因爲我無法觸摸經紀人的代碼。
你可以添加主機ID作爲sufix到ID。 – iz25