Я столкнулся с такой ситуацией:Синхронизация текущего идентификатор сообщения в разговоре между Алисой и Бобом
Хост и B обмениваются сообщениями в разговоре через брокера.
Когда хозяин B получает сообщения, которые он посылает обратно фишку доставки хосту так, что он может показать пользователю, что B получил свои сообщения. Это также может произойти наоборот.
В любой момент или B может находиться в автономном режиме, и брокер будет держаться сообщений, пока они не придут в Интернете, а затем доставить их.
Каждого хост сохраняет свои собственные и другие хосты сообщений в базе данных таблицы:
ID | From | To | Msg | Type | Uid
Я понял, используя первичный ключ идентификатора наивной таблицы был бы плохим выбором для идентификации сообщений (как это зависит в порядок вставки), поэтому я определил пользовательское уникальное поле id (uid).
Мой вопрос:
Как я могу убедиться, что текущий идентификатор сообщения синхронизируется между хостом A и B так, что только одно сообщение имеет этот идентификатор? Чтобы я мог использовать идентификатор токена доставки, чтобы определить, какое сообщение было получено, и было бы невозможно, если бы у меня было более одного сообщения с тем же идентификатором.
Если я делаю это по наивности приращения это каждый раз, когда мы отправить/получить сообщение сначала выглядит нормально:
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 каждый раз (с чрезвычайно низкой вероятностью столкновения), но он вводит большие накладные расходы, так как каждое сообщение нужно как переносить, так и хранить.
К сожалению, любое решение, касающееся брокера, нецелесообразно, поскольку я не могу коснуться кода брокера.
Вы можете добавить идентификатор хоста как sufix в ID. – iz25