Skip to content

Commit

Permalink
Merge pull request #1629 from rkmathi/rkmathi/update-readme-ja
Browse files Browse the repository at this point in the history
Update README.ja.md to follow #1627
  • Loading branch information
namusyaka committed Nov 5, 2020
2 parents 177392f + 5f53078 commit 91f1500
Showing 1 changed file with 61 additions and 31 deletions.
92 changes: 61 additions & 31 deletions README.ja.md
Expand Up @@ -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`することをお薦めします。

## 目次

Expand Down Expand Up @@ -747,7 +750,7 @@ erb :overview, :locals => { :text => textile(:introduction) }
%p= textile(:greetings)
```

TexttileからはRubyを呼ぶことができないので、Textileで書かれたレイアウトを使うことはできません。しかしながら、`:layout_engine`オプションを渡すことでテンプレートのものとは異なるレンダリングエンジンをレイアウトのために使うことができます。
TextileからはRubyを呼ぶことができないので、Textileで書かれたレイアウトを使うことはできません。しかしながら、`:layout_engine`オプションを渡すことでテンプレートのものとは異なるレンダリングエンジンをレイアウトのために使うことができます。

#### RDoc テンプレート

Expand Down Expand Up @@ -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`は呼ばれず、実行フローの任意の遅れたタイミングでユーザがこれを閉じることを可能にします。これはThinRainbowsのようなイベント型サーバ上でしか機能しません。他のサーバでは依然ストリームは閉じられます。
オプション引数が`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?`をチェックすることを勧めます。
Expand Down Expand Up @@ -2107,7 +2128,7 @@ set :protection, :session => true

<dt>threaded</dt>
<dd>
<tt>true</tt>に設定されているときは、Thinにリクエストを処理するために<tt>EventMachine.defer</tt>を使うことを通知する。
<tt>true</tt>に設定されているときは、サーバにリクエストを処理するために<tt>EventMachine.defer</tt>を使うことを通知する。
</dd>

<dt>views</dt>
Expand Down Expand Up @@ -2631,7 +2652,7 @@ ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-o HOST] [-s HANDLER]
-p # ポート指定(デフォルトは4567)
-o # ホスト指定(デフォルトは0.0.0.0)
-e # 環境を指定 (デフォルトはdevelopment)
-s # rackserver/handlerを指定 (デフォルトはthin)
-s # rackserver/handlerを指定 (デフォルトはpuma)
-x # mutex lockを付ける (デフォルトはoff)
```

Expand All @@ -2640,13 +2661,13 @@ ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-o HOST] [-s HANDLER]
_この[StackOverflow](https://stackoverflow.com/a/6282999/5245129)
のKonstantinによる回答を言い換えています。_

Sinatraでは同時実行モデルを負わせることはできませんが、根本的な部分であるThinやPuma、WebrickのようなRackハンドラ(サーバー)部分に委ねることができます。
Sinatraでは同時実行モデルを負わせることはできませんが、根本的な部分であるやPuma、WEBrickのようなRackハンドラ(サーバー)部分に委ねることができます。
Sinatra自身はスレッドセーフであり、もしRackハンドラが同時実行モデルのスレッドを使用していても問題はありません。
つまり、これはサーバーを起動させる時、特定のRackハンドラに対して正しい起動処理を特定することが出来ます。
この例はThinサーバーをマルチスレッドで起動する方法のデモです
この例はRainbowsサーバーをマルチスレッドで起動する方法のデモです

```ruby
# app.rb
# config.ru

require 'sinatra/base'

Expand All @@ -2656,13 +2677,22 @@ class App < Sinatra::Base
end
end

App.run!
run App
```

```ruby
# rainbows.conf

# RainbowsのコンフィギュレータはUnicornのものをベースにしています。
Rainbows! do
use :ThreadSpawn
end
```

サーバーを開始するコマンドです
次のようなコマンドでサーバを起動します

```
thin --threaded start
rainbows -c rainbows.conf
```

## 必要環境
Expand Down

0 comments on commit 91f1500

Please sign in to comment.