lighttpd / mod_wstunnel объединяет JSON сообщений - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь использовать lighttpd (v1.4.49) с mod_wstunnel.

$HTTP["url"] =~ "^/websocket" {
    wstunnel.server = ( "" => ( ( "host" => "127.0.0.1", "port" => "50007" ) ) )
    wstunnel.frame-type = "text"
    wstunnel.ping-interval = 30
}

Внутренний TCP-сервер отправляет одну строку JSON -Сообщения, которые должны быть получены WebSocket-Clients onmessage обработчик.

Однако иногда два последовательных сообщения объединяются посредством mod_wstunnel и принимаются (и передаются на onmessage) как одно сообщение.

Есть ли какие-нибудь " токен конца сообщения, который я мог бы отправить, чтобы явно «сообщить» mod_wstunnel, что сообщение завершено?

Спасибо, Сэм

1 Ответ

0 голосов
/ 05 мая 2020

Вероятно, вам следует исправить свое приложение, если ваше приложение зависит от кадрирования на уровне веб-сокетов. См. https://tools.ietf.org/html/rfc6455#section -5.4

Unless specified otherwise by an extension, frames have no semantic
meaning. An intermediary might coalesce and/or split frames, if no
extensions were negotiated by the client and the server or if some
extensions were negotiated, but the intermediary understood all the
extensions negotiated and knows how to coalesce and/or split frames
in the presence of these extensions. One implication of this is that
in absence of extensions, senders and receivers must not depend on
the presence of specific frame boundaries.

Ваш бэкэнд отправляет JSON и ничего не знает о веб-сокетах, и поэтому не может указать, как mod_wstunnel должен отправлять фреймы веб-сокетов. Ваше клиентское приложение не должно зависеть от кадрирования веб-сокета, но если вы хотите попытаться смягчить это на стороне сервера, ваш бэкэнд может делать паузу между отправкой каждого сообщения JSON. Было бы лучше исправить ваше приложение для обработки полных JSON сообщений по одному.

...