diff --git a/README.ja.md b/README.ja.md index 99aff979d9..33902102d9 100644 --- a/README.ja.md +++ b/README.ja.md @@ -28,7 +28,10 @@ ruby myapp.rb [http://localhost:4567](http://localhost:4567) を開きます。 -ThinがあればSinatraはこれを利用するので、`gem install thin`することをお薦めします。 +コードを変更しても、サーバを再起動しないと変更が有効になりません。 +コードを変更するたびにサーバを再起動するか、[sinatra/reloader](http://www.sinatrarb.com/contrib/reloader)を使ってください。 + +PumaがあればSinatraはこれを利用するので、`gem install puma`することをお薦めします。 ## 目次 @@ -747,7 +750,7 @@ erb :overview, :locals => { :text => textile(:introduction) } %p= textile(:greetings) ``` -TexttileからはRubyを呼ぶことができないので、Textileで書かれたレイアウトを使うことはできません。しかしながら、`:layout_engine`オプションを渡すことでテンプレートのものとは異なるレンダリングエンジンをレイアウトのために使うことができます。 +TextileからはRubyを呼ぶことができないので、Textileで書かれたレイアウトを使うことはできません。しかしながら、`:layout_engine`オプションを渡すことでテンプレートのものとは異なるレンダリングエンジンをレイアウトのために使うことができます。 #### RDoc テンプレート @@ -1482,37 +1485,55 @@ end これはストリーミングAPI、[Server Sent Events](https://w3c.github.io/eventsource/)の実装を可能にし、[WebSockets](https://en.wikipedia.org/wiki/WebSocket)の土台に使うことができます。また、一部のコンテンツが遅いリソースに依存しているときに、スループットを上げるために使うこともできます。 -ノート: ストリーミングの挙動、特に並行リクエスト(cuncurrent requests)の数は、アプリケーションを提供するのに使われるWebサーバに強く依存します。いくつかのサーバは、ストリーミングを全くサポートしません。サーバがストリーミングをサポートしない場合、ボディは`stream`に渡されたブロックの実行が終了した後、一度に全部送られることになります。ストリーミングは、Shotgunを使った場合は全く動作しません。 +ノート: ストリーミングの挙動、特に並行リクエスト(concurrent requests)の数は、アプリケーションを提供するのに使われるWebサーバに強く依存します。いくつかのサーバは、ストリーミングを全くサポートしません。サーバがストリーミングをサポートしない場合、ボディは`stream`に渡されたブロックの実行が終了した後、一度に全部送られることになります。ストリーミングは、Shotgunを使った場合は全く動作しません。 -オプション引数が`keep_open`にセットされている場合、ストリームオブジェクト上で`close`は呼ばれず、実行フローの任意の遅れたタイミングでユーザがこれを閉じることを可能にします。これはThinやRainbowsのようなイベント型サーバ上でしか機能しません。他のサーバでは依然ストリームは閉じられます。 +オプション引数が`keep_open`にセットされている場合、ストリームオブジェクト上で`close`は呼ばれず、実行フローの任意の遅れたタイミングでユーザがこれを閉じることを可能にします。これはRainbowsのようなイベント型サーバ上でしか機能しません。他のサーバでは依然ストリームは閉じられます。 ```ruby -# ロングポーリング - -set :server, :thin -connections = [] +# config.ru +require 'sinatra/base' -get '/subscribe' do - # サーバイベントにおけるクライアントの関心を登録 - stream(:keep_open) do |out| - connections << out - # 死んでいるコネクションを排除 - connections.reject!(&:closed?) +class App < Sinatra::Base + connections = [] + + get '/subscribe' do + # register a client's interest in server events + # サーバイベントにおけるクライアントの関心を登録 + stream(:keep_open) do |out| + connections << out + # 死んでいるコネクションを排除 + connections.reject!(&:closed?) + end end -end -post '/message' do - connections.each do |out| - # クライアントへ新規メッセージ到着の通知 - out << params['message'] << "\n" + post '/:message' do + connections.each do |out| + # クライアントへ新規メッセージ到着の通知 + out << params['message'] << "\n" - # クライアントへの再接続の指示 - out.close + # クライアントへの再接続の指示 + out.close + end + + # 肯定応答 + "message received" end +end + +run App +``` - # 肯定応答 - "message received" +```ruby +# rainbows.conf +Rainbows! do + use :EventMachine end +```` + +次のように起動します。 + +```shell +rainbows -c rainbows.conf ``` クライアントはソケットに書き込もうとしている接続を閉じることも可能です。そのため、記述しようとする前に`out.closed?`をチェックすることを勧めます。 @@ -2107,7 +2128,7 @@ set :protection, :session => true