Веб-сокеты отправляют и получают полные сообщения? - PullRequest
1 голос
/ 06 июля 2019

Я новичок в веб-разработке и пытаюсь написать простую веб-игру, использующую python и django для моего сервера, с небольшим количеством javascript для графического интерфейса.Я использую пакет channel для использования веб-сокетов для связи, и у меня есть небольшой вопрос о веб-сокетах.

В Python я знаю, что когда мы используем сокеты, сообщение не гарантируетсябыть отправленным полностью.Например, если я использую socket.send в python, я не могу отправить сообщение целиком, и в этом случае мне нужно повторно отправить то, что осталось, а на принимающей стороне я не гарантирую получить полное сообщение, используя socket.recv(при условии, что аргумент bufsize достаточно велик для полного сообщения), поэтому я должен продолжать вызывать recv, пока не получу все сообщение.

Мой вопрос: то же самое сили нет?

Я пытался найти это в документации MDN и в Google, но я не смог найти никакой информации по этому вопросу.Кроме того, каждый пример, который я видел в Интернете, не учитывал это, поэтому кажется, что то, что я отправляю с socket.send (в javascript), является именно тем, что я получаю на другом конце, и наоборот.

Это правда?Могу ли я предположить, что сообщение, которое я отправляю с socket.send на стороне клиента, будет получено полностью в одном событии на стороне сервера (который в моем случае является потребителем веб-сокета ) и наоборот: еслисервер отправляет сообщение клиенту, будет ли оно полностью получено в одном Message событии на стороне клиента в javascript?

Заранее спасибо.

1 Ответ

0 голосов
/ 06 июля 2019

Можно предположить, что сообщение будет получено, если клиент подключен.И наоборот, сервер получит сообщение, которое слушает.

Каналы Django надежно ненадежны.

Calling receive on these channels does not guarantee that you will get the messages in order or that you will get anything if the channel is non-empty.

https://channels.readthedocs.io/en/latest/channel_layer_spec.html#channel-semantics

...