Да, и нет.
TL; DR -> Вы не можете гарантировать, что сторонняя служба сокетов доставляет вам сообщения в этом порядке. Но, по большей части, вы можете настроить приложение javascript, чтобы вести себя так, как если бы это была гарантия.
Если вы используете socket.send
, я предположим, что это сторонняя служба веб-сервисов, такая как socket.io. В этом случае вы обмениваетесь данными с вашего js-клиента, управляя внутренними данными «состояние» с сокращением, на другой компьютер, сервер веб-сервера.
Поведение websocket за пределами границы вашего javascript-клиента. Даже если служба считает, что она будет реагировать по порядку, реальный мир может вмешаться ... власть может выходить между запросами (A), (B) и (C). Затем A принимается и отвечает также, а также с (C), но сервер websocket никогда не видел (B).
Это экстремальный, но наглядный пример.
Redux может помочь сделать пару гарантий или безопасных допущений, если они выполнены соответствующим образом. Это может помочь гарантировать, что порядок, в котором изменяется состояние пользователя или данных вашего js-приложения, является синхронным, т. Е. Если вы делаете (a), тогда (b), то (c) только в приложении javascript они происходят в этом порядке во времени ,
Ключ тогда управляет этой границей. Вы управляете границей пользователя, нажимающего ваше приложение js, ожидая щелчка, после того, как пользователь решил нажать кнопку. Точно так же вы можете дождаться подтверждения из websocket, что он сделал (A) (B) или (C).
Наивный, но очень полезный шаблон для вашего примера будет заключаться в том, чтобы заставить ваше приложение js вести себя так, как будто заказ был гарантирован, с подходом «взять последний запрос». Если вы отключите socket.send (A), вы ждете ответа. Если (B) отправляется до того, как сокет говорит, что он получил (A), вы выбрасываете (A) и отправляете (B) и ждете, чтобы узнать, отвечает ли сокет, что операция (B) была успешной.
Спасибо, как насчет использования концепции «порядковый номер», чтобы гарантировать заказ? Еще раз спасибо! Если есть какие-то ресурсы этой проблемы. дай мне знать, пожалуйста. ! Есть ли другое решение? – nujabes
Простая, как кажется, эта проблема является одной из самых сложных и интересных задач в CS ... распределенных вычислениях. Это видео https://www.youtube.com/watch?v=9dALrnCOLNE прекрасно справляется с объяснением того, как некоторые, казалось бы, простые «проблемы порядка» становятся невероятно сложными и могут быть решены. На практике, хотя, используя redux на javascript-клиенте , есть гораздо более прямые и практичные способы «гарантирования порядка». У вас есть конкретная проблема, ошибка или случай использования? –
Практический способ убедиться, что после трех изменений вы не вернетесь в «Альфа», чтобы не сгонять действие стиля «EDIT_SUCCESS», которое изменило бы имя в приложении JS на «Alpha», если это не было последний «EDIT_REQUEST», который был отправлен. То есть если вы отправили EDIT_REQUEST для бета-версии, после Alpha и получили успешное изменение BETA с веб-сайта, вы прекратите ждать успеха альфы и проигнорируете его. –