リアルタイムサービスを開発するときは、使い慣れたsetInterval()で対応できますが、WebSocketテクノロジなどの機能を活用する必要があります。 メリットは次のとおりです。
- イベントの即時顧客通知
- pub / subアーキテクチャのおかげで、イベントチャネルを使用してサービスを作成する機能。
- サーバーへの絶え間ないリクエストの欠如と結果としての負荷の減少。
私たちのプロジェクトはRuby on Railsで開発されており、多くのNginx + Passengerを使用しています。
メッセージングを実装するすべてのライブラリの中で、 Fayeは最も簡単に実装されています。
- 別のプロセスとして機能し、特定のサーバーを使用する必要はありません。
- プロジェクト構成に依存しない
- RoRおよびNode.jsのバージョンがあります
セットアップと使用のプロセスは、 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プロジェクトでは 、ユーザー間でメッセージを交換するために、この技術を意図した目的に使用しています。
重要なセキュリティトピックについては説明しませんでしたが、これはまったく別の話です。
ご清聴ありがとうございました。