Подтвердить что ты не робот

Могут ли Apache Proxy Websockets для Rstudio Shiny?

Веб-узлы могут быть быстрее, чем простые HTTP-запросы, и браузеры обычно могут открывать больше соединений в сети.

Мой браузер сообщает мне через консоль javascript, что, пока мое блестящее приложение работает и apache proxypass правильно проксирует, веб-сайты не работают:

WebSocket connection to 'wss://www.example.com/shiny/01_hello/__sockjs__/058/v193lng7/websocket' failed: WebSocket is closed before the connection is established.

Я видел разные способы, с помощью которых Apache может быть настроен на прокси-серверы. Например:

    ProxyPass /shiny/  ws://127.0.0.1:3838/
    ProxyPass /shiny/ wss://127.0.0.1:3838/
    RedirectMatch ^/shiny$ /shiny/

и

  RewriteEngine On
  RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
  RewriteCond %{QUERY_STRING} transport=websocket    [NC]
  RewriteRule /(.*)           ws://localhost:3001/$1 [P,L]

  ProxyPass / http://localhost:3001/
  ProxyPassReverse / http://localhost:3001/

Мой вопрос: может ли любой из них быть адаптирован для использования с блестящими?

4b9b3361

Ответ 1

Скорее всего, ваш R файл плохо обрабатывает веб-сайты.

В вашем файле HTML в java script у вас есть что-то вроде:

var socket = new WebSocket("wss://"+hostlocation, "HelloR")

И затем следующие функции, которые вы определяете по мере необходимости:

socket.onopen = function() {}
socket.onmessage = function got_packet(msg) {}
socket.onclose = function(){}

И в вашем коде R у вас есть что-то вроде:

w = create_server(webpage=static_text_service(htmldata))
f = function(DATA,WS,...)
{
list(msg,p)= process(data)
websocket_broadcast(toJSON(list(msg=msg, fig=p)),WS$server)
}
set_callback("receive",f,w)
ctmp = tempfile()
itmp = tempfile()
daemonize(w)

Где htmldata - ваш html файл.

Затем измените httpd.conf, чтобы:

<VirtualHost *:origin_port>
  ProxyPass /shiny/  ws://127.0.0.1:3838/
  ProxyPassReverse /shiny/  ws://127.0.0.1:3838/
</VirtualHost>

где origin_port - номер порта источника, а ws://127.0.0.1: 3838/- адрес и порт хоста.

Убедитесь, что вы не пропустили ни одну из этих критических частей. Надеюсь, что это поможет.