Websockets可以比普通的HTTP(s)请求更快,浏览器通常可以打开更多的websocket连接。
我的浏览器通过javascript控制台告诉我,虽然我的闪亮应用程序正常工作,但apache proxypass正确代理,但websockets无效:
WebSocket connection to 'wss://www.example.com/shiny/01_hello/__sockjs__/058/v193lng7/websocket' failed: WebSocket is closed before the connection is established.
我已经看到了Apache可以配置为代理websockets的不同方式。如:
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/
我的问题是,这些中的任何一种都可以适用于光泽吗?
答案 0 :(得分:1)
很可能你的R档文件很糟糕。
在java脚本的HTML文件中,您有类似的内容:
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 /是主机的地址和端口。
确保您没有遗漏任何这些关键部分。希望它有所帮助。