Важно отметить, что вы находитесь в распределенной системе - клиент не блокирует"комнату" от других изменений. Фактически это означает, что вы говорите о данных извне : информация, видимая веб-клиентом, устарела (устарела не менее наносекунд) и может быть изменена.
условие гонки - к моменту поступления запроса на добавление доступность комнаты может измениться.
Это означает, что ваш протокол для запроса на добавление требует некоторого обеспечения для не очень довольных -дорожка. И клиентская реализация должна будет обрабатывать случай, когда запрос на добавление дает желаемый ответ.
Так что каждый должен все равно обработать этот случай; предполетная проверка на самом деле не спасает вас от какой-либо работы.
Так что с вашим вторым подходом все в порядке.
, но это также создает несогласованность в формате ответа.
Не совсем - опять же, вы должны обработать режимы отказа. Так что теперь мы просто спорим о том, какие данные / метаданные используются в качестве предиката, где должен распространяться код клиента.