可以为Rstudio';有光泽吗?

可以为Rstudio';有光泽吗?,r,apache,proxy,websocket,shiny,R,Apache,Proxy,Websocket,Shiny,websocket可以比普通HTTP(s)请求更快,浏览器通常可以打开更多的websocket连接 我的浏览器通过javascript控制台告诉我,虽然我的闪亮应用程序工作正常,apache proxypass代理正确,但WebSocket无法工作: WebSocket connection to 'wss://www.example.com/shiny/01_hello/__sockjs__/058/v193lng7/websocket' failed: WebSocket is closed

websocket可以比普通HTTP(s)请求更快,浏览器通常可以打开更多的websocket连接

我的浏览器通过javascript控制台告诉我,虽然我的闪亮应用程序工作正常,apache proxypass代理正确,但WebSocket无法工作:

WebSocket connection to 'wss://www.example.com/shiny/01_hello/__sockjs__/058/v193lng7/websocket' failed: WebSocket is closed before the connection is established.
我已经看到了将Apache配置为代理WebSocket的不同方式。例如:

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


我的问题是,这些文件中的任何一个可以被修改为与shiny一起使用吗?

最有可能的是,您的R文件处理WebSocket的方式很糟糕

在java脚本的HTML文件中,有如下内容:

var socket = new WebSocket("wss://"+hostlocation, "HelloR")
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)
然后根据需要定义以下函数:

socket.onopen = function() {}
socket.onmessage = function got_packet(msg) {}
socket.onclose = function(){}
在你的R代码中,你有这样的东西:

var socket = new WebSocket("wss://"+hostlocation, "HelloR")
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>

ProxyPass/shinny/ws://127.0.0.1:3838/
ProxyPassReverse/shinny/ws://127.0.0.1:3838/
其中origin_port是origin的端口号,ws://127.0.0.1:3838/是主机的地址和端口


确保您没有遗漏任何这些关键部件。希望能有所帮助。

感谢您的回答,但是当直接连接到Shining server时,WebSocket功能齐全。使用Apache代理Shining server时,WebSocket未正确代理。请尝试ProxyPass,但也添加一个ProxyPassReverse/Shining/ws://127.0.0.1:3838/我认为这可能是问题所在。我添加了代理转发部分。希望它能解决您的问题。感谢您的尝试,但是按照建议添加ProxyPass和ProxyPassReverse并不能正确代理WebSocket。我认为最好是有权访问shiny server的人在发布答案之前先在本地确认它是否工作。我有一个相关的问题。使用apache代理,我的闪亮应用程序准系统断开连接,我在闪亮服务器日志中看到“RobustSockJS冲突”消息。为ws:添加websocket proxypass或/和proxypassreverse确实有所改进。