Я пишу бэкэнд для веб-приложения на C ++ (с boost-beast), а внешний интерфейс, вероятно, будет использовать socket.io.Поэтому этот вопрос относится как к реализации, так и к тому, есть ли в стандарте веб-сокета что-то, отвечающее на мой вопрос.
Я не уверен, какие меры предосторожности следует предпринять, чтобы гарантировать полноту сообщения.Скажем, клиент отправляет сообщение длиной 100 байт, а boost :: beast читает сообщение с async_read
до multi_buffer
.Я гарантированно получу все 100 байтов?Наверное.Но что, если сообщение имеет размер 1 МБ?
Почему я считаю этот вопрос важным? Потому что это определяет, насколько простым будет мой протокол связи.Если нужно отправлять и получать только полные сообщения, мне не нужно реализовывать промежуточный протокол с заголовком, который определяет размер сообщения (что в целом необходимо для TCP, но не обязательно в некоторых библиотеках обмена сообщениями).как ZeroMQ).Однако, если нет никакой гарантии, что сообщения будут завершены по прибытии, тогда я должен внедрить протокол, чтобы получить размер сообщения.Нечто подобное (максимально простое): 6 байтов, которые содержат размер сообщения + сообщение.Затем я читаю это как очередь FIFO для обработки размера сообщения, а затем читаю сообщение.
Неправильно ли я подхожу к веб-сокету?Пожалуйста, сообщите.