2015-04-05 18 views
20

Websockets, sade HTTP (istekleri) isteklerinden daha hızlı olabilir ve tarayıcılar genellikle daha fazla web-bağlantısı bağlantısı açabilir.Rstudio's Shiny için Apache Proxy Web Yuvaları Olabilir mi?

Benim tarayıcısı benim parlak uygulamanın çalışma ve Apache ProxyPasss doğru proxy iken, WebSockets çalışmayan javascript konsolu üzerinden bana: Apache yapılandırılabilir farklı yollar gördüm

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

proxy websockets için. Mesela:

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

ve:

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/ 

Sorum Bunlardan herhangi parlak ile kullanılmak üzere adapte edilebilir, nedir?

+0

İlişkili bir sorunum var. Apache proxy'sini kullanarak parlak uygulamalarım sistematik olarak kesildi ve parlak sunucu günlüğünde "RobustSockJS çarpışma" mesajlarını görüyorum. Ws için websocket proxypass veya/ve proxypassreverse ekleme: geliştirir. –

cevap

1

Büyük ihtimalle R dosyanız, Websockets yazılımını kötü bir şekilde yönetiliyor. Sonra

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

Ve istediğiniz kadar tanımlamak aşağıdaki işlevleri: java komut HTML dosyasında

, gibi bir şey var

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

Ve R kodunda sen gibi bir şey bir şey var: HTMLData html dosyası olduğunu

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) 

.

O olması httpd.conf değiştirin:

origin_port Kalkış ve ws port numarası
<VirtualHost *:origin_port> 
    ProxyPass /shiny/ ws://127.0.0.1:3838/ 
    ProxyPassReverse /shiny/ ws://127.0.0.1:3838/ 
</VirtualHost> 

: ev sahibi 3838/olup adresi ve port: //127.0.0.1.

Bu kritik parçalardan hiçbirini kaçırmadığınızdan emin olun. Umarım yardımcı olur.

+0

Cevabınız için teşekkürler, ancak Parlak sunucuya doğrudan bağlanırken Websockets tamamen işlevseldir. Parlak sunucu Apache kullanılarak proxy edildiğinde, Websockets doğru şekilde proxy edilmez. – variable

+0

Oh! Tamam. Bunun için üzgünüm. Bunu açıkça anlamadım. –

+0

ProxyPass'i deneyin, ancak ayrıca bir ProxyPassReverse/bright/ws: //127.0.0.1: 3838/ ekleyin. Sorun olabileceğini düşünüyorum. –