SSLでFayeを使用する

私たちは豊かな時代に生きており、数十の提案されたオプションから自由に選択できます。



リアルタイムサービスを開発するときは、使い慣れたsetInterval()で対応できますが、WebSocketテクノロジなどの機能を活用する必要があります。 メリットは次のとおりです。





私たちのプロジェクトはRuby on Railsで開発されており、多くのNginx + Passengerを使用しています。

メッセージングを実装するすべてのライブラリの中で、 Fayeは最も簡単に実装されています。



セットアップと使用のプロセスは、 Fayeのスクリーンキャストでサーバーをシャットダウンしない方法としてFayeハブに関する記事であるドキュメントで詳しく説明されています

しかし、それが通常起こるように、いつでも困難が発生する可能性があり、一歩踏み出す価値があります。



次に、 SSLを使用する場合のFayeの構成状況について説明します。

この短い記事で誰かの命を救いましょう。



Fayeサーバーのセットアップ



FayeはサーバーとしてThinを使用します。 SSLを有効にして起動します。

プロジェクトルートに次の内容のファイルfaye.ruを作成します



require 'faye' faye_server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 30) Faye::WebSocket.load_adapter('thin') run faye_server
      
      







プロジェクトディレクトリlib / ssl /に SSL証明書配置します。

config / thin.yml設定ファイルを作成します



-ポート:9292

ssl:true

ssl_key_file:/ <プロジェクト名> /lib/ssl/cert.key

ssl_cert_file:/ <プロジェクト名> /lib/ssl/cert.crt

環境:生産

ラックアップ:faye.ru



サーバーを起動するには、次のコマンドを使用します。

 bundle exec thin -C config/thin.yml -e production start
      
      





(生産モードが必要です)

サーバーが構成されて実行されているので、fayeクライアントの接続を支援します。



Fayeクライアントのセットアップ



クライアントはに接続します
  https://example.com/faye 


Nginxを使用して、Fayeサーバーへのプロキシを作成します。

サーバーブロックでは、次の場所を記述します。

 location /faye { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass https://127.0.0.1:9292; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; break; }
      
      





Nginxを再起動し、すべてが正しく構成されていれば、クライアントとサーバーの接続を確立し、チャネルをサブスクライブできます。



 var faye = new Faye.Client("https://example.com/faye"); faye.subscribe("/events", function(data) { alert(data) });
      
      







Railsからメッセージを送信する



送信するには、チャネルとメッセージを使用してFayeサーバーに要求する必要があります。 SSLを使用する場合、次の方法がこれに使用されます。



 /* channel   data   json  */ def broadcast(channel, data) url = URI.parse("https://localhost:9292/faye") form = Net::HTTP::Post.new(url.path.empty? ? '/' : url.path) form.set_form_data(:message => {:channel => channel, :data => data }.to_json) http = Net::HTTP.new(url.host, url.port) http.use_ssl = url.scheme == "https" http.verify_mode = OpenSSL::SSL::VERIFY_NONE http.start {|h| h.request(form)} end
      
      







その結果、クライアントと完全に機能するメッセージングシステムが完成しました。

Staplyプロジェクトで 、ユーザー間でメッセージを交換するために、この技術を意図した目的に使用しています。

重要なセキュリティトピックについては説明しませんでしたが、これはまったく別の話です。

ご清聴ありがとうございました。



All Articles