2011-12-24 15 views
3

Socket.IOサーバー+ Rails Webアプリケーションの設定に興味があります。しかし、多くの人が気づいているように、WebSocketをサポートするWebサーバーはあまりありません。ここまでの2回の試行がありました。WebSocket/Socket.IOサーバーの良い解決策(Nginx、Nodeなどを試しました)

  1. Nginxモジュールのルートを試しました。これを完全に稼働させるために、コンパイル+コンフィギュレーションの組み合わせを取得できませんでした。おそらく私のところで何かばかげている。

    http://www.letseehere.com/reverse-proxy-web-sockets

  2. Iは、ノード-HTTPプロキシで自分のWebサーバーを書いてみましたが、私はすべてのチュートリアルを読んだにも関わらず、トラブルに完全Socket.IOでこれを統合していました。

    http://github.com/nodejitsu/node-http-proxy

  3. 私はbouncy.jsで自分のWebサーバーを書いてみましたが、それは恐ろしく遅いです。私のコードかもしれません、フレームワークかもしれません。何も思いつきません。

    http://github.com/substack/bouncy

これらは私が試したものですが、私はこれらのルートをダウンして、最終的には何かの仕事を得た(そしてもちろん、彼らはそれを得るために何をしたかしている他の誰ちょうど好奇心が強いですワーキング)。

+0

質問は不明ですが、あなたの目標は何ですか?レールへのプロキシ?役に立つ情報を提供しようとしています:node.ioにnode.ioを設定しました。私はスタンドアロンのWebサーバー(普通はexpress.js)として使用しています –

+0

@ChrisBiscardi Railsアプリケーションと一緒にSocket.IOを手に入れた人から聞きたいことがあります。それは働いています... express.jsの問題は、(1)私はすでに多くのレガシーなRailsコードを持っており、(2)使用したWebSocketを統合するための2つのフレームワークがあり、私の結果は上にリストされています。 – robinhoode

答えて

5

alessioalexのリクエストによると、ここに私の設定ファイルがあります。私は既存のコメントをすべて削除しましたが、自分自身が重要であるとは思っていなかったことをいくつか追加しました。

ただし、この設定のすべての部分については、この記事の範囲外ですが、HAProxy Webサイトで必要なドキュメントを見つけることができます。

global 
    maxconn 4096 
    pidfile /var/run/haproxy.pid 

defaults 
    mode http 

frontend all 
    bind 0.0.0.0:80 
    mode tcp 

    maxconn 200000 
    timeout client 86400000 
    default_backend www_backend 

    # Any URL beginning with socket.io will be flagged as 'is_websocket' 
    acl is_websocket path_beg /socket.io 
    acl is_websocket hdr(Upgrade) -i WebSocket 
    acl is_websocket hdr_beg(Host) -i ws 

    # The connection to use if 'is_websocket' is flagged 
    use_backend socket_backend_http if is_websocket 

    tcp-request inspect-delay 500ms 
    tcp-request content accept if HTTP 

backend www_backend 
    option httplog 
    option httpclose 
    balance roundrobin 
    option forwardfor 
    timeout server 30000 
    timeout connect 4000 
    server thin1 localhost:4001 weight 1 maxconn 1024 check 
    server thin2 localhost:4002 weight 1 maxconn 1024 check 
    server thin3 localhost:4003 weight 1 maxconn 1024 check 

backend socket_backend_http 
    mode http 
    option httplog 
    option http-server-close 
    option forceclose 
    no option httpclose 
    balance roundrobin 
    option forwardfor 
    timeout queue 5000 
    timeout server 86400000 
    timeout connect 86400000 
    timeout check 1s 
    server socket1 localhost:5001 weight 1 maxconn 1024 check 
+1

私はこの設定に問題がありました。それは非常に近いですが。このバージョンはコピー貼り付きで私のために働いた。 http://stackoverflow.com/questions/4360221/haproxy-websocket-disconnection –

0

ここにnode.js socket.ioサーバーがあります。こののみはWebソケットを処理することに注意してください。

var app = require('http').createServer(handler) 
    , io = require('socket.io').listen(app) 
    , fs = require('fs') 

app.listen(8080); 

function handler (req, res) {} 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

と、対応するクライアント:

<script src="/path/to/rails/static/files/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost:8080'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

実行node server.jsノードサーバを起動し、レールからのindex.htmlを要求します。

あなたはHTTPノードモジュールまたはこのライブラリのいずれかを使用してHTTPを介して通信できるのWebSocketサーバからレール関数を呼び出す必要がある場合:https://github.com/mikeal/request

+0

この書き込みをお寄せいただきありがとうございます。私はhttp://socket.ioの文書を見てきましたので、これが出発点であることはよく知っています。私がこの記事で尋ねる質問は、WebSocketと標準のHTTPリクエストを同時に処理する方法です。 – robinhoode

+0

これはこれを行います。ポート80の古いRubyコードとポート8080のノード/ Webソケット。ノードでHTTPを処理しますか? –

0

あなたが弾む使用することができますが、私はHAProxyを、お勧めします高度に人身売買されたウェブサイトのための優れたソリューション。 HAProxy + WebSocket Disconnection

ダイナミックなもののための静的ファイル+ノード& websockets(Socket.IO)用のHAProxy + Nginxの使用をお勧めします。

node-http-proxyはノード0.6.xのWebSocketsに問題があるため、現時点では使用できません。

+0

あなたはこれまで自分のプロジェクトでこれまで作業していましたか? – robinhoode

+0

ちょうどこれが働いた。いずれのチュートリアルにも従っていませんでしたが、コラージュのトリックが効いていたようです。将来私はもっとHAProxyを使用するように見えます。 – robinhoode

+0

@robinhoodeそれは素晴らしいです、多分あなたが後でそれをチェックアウトできるようにここに設定を投稿することができます。私はHAProxyで少し演奏し、次のプロジェクトでそれを実装する必要がありますが、それまでは素晴らしいことでした。 Trello.comは、例えばプロダクションでそれを使用しています。 – alessioalex

関連する問題