Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update README.ja.md to follow #1627 #1629

Merged
merged 2 commits into from Nov 5, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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`は呼ばれず、実行フローの任意の遅れたタイミングでユーザがこれを閉じることを可能にします。これは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?`をチェックすることを勧めます。
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