1

私は本Sinatra: Up and Running p からこの例を実行しようとしています。46、しかし、それを機能させることはできません。プログラムコードは次のとおりです。

require 'sinatra'

before do
  content_type :txt
end

connections = []

get '/consume' do
  stream(:keep_open) do |out|
    # store connection for later on
    connections << out
    # remove connection when closed properly
    out.callback { connections.delete(out) }
    # remove connection when closed due to an error
    out.errback do
      logger.warn 'we just lost a connection!'
      connections.delete(out)
    end
  end
end

get '/broadcast/:message' do
  connections.each do |out| 
    out << "#{Time.now} -> #{params[:message]}" << "\n"
  end
  "Sent #{params[:message]} to all clients."
end

コードをテストする手順は次のとおりです。

It’s a little tricky to demonstrate the behavior in text, but a good demonstration would
be to start the application, then open a web browser and navigate to http://localhost:
4567/consume. Next, open a terminal and use cURL to send messages to the server.
    $ curl http://localhost:4567/broadcast/hello
    Sent hello to all clients.
If you look back at the web browser, you should see that the content of the page has
been updated with a time stamp and the message that you sent via the terminal. The
connection remains open, and the client continues to wait for further information from
the server.

これらの指示に従うと、エラーは発生しませんが、ブラウザーに「こんにちは」というメッセージは表示されません。Webrick で Sinatra を実行しています。なぜ機能しないのですか?

ありがとう!

更新 (コンスタンチンの薄い提案)

私は今、薄く始めて、本とOPで説明されている2つのステップを実行します. Thin が実際に両方の要求を受け取ることがわかります。ただし、ブラウザに「hello」という出力が表示されません。

>rackup
>> Thin web server (v1.4.1 codename Chromeo)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:9292, CTRL+C to stop
127.0.0.1 - - [13/Aug/2012 12:48:03] "GET /consume HTTP/1.1" 200 - 0.0900
127.0.0.1 - - [13/Aug/2012 12:48:03] "GET /favicon.ico HTTP/1.1" 404 447 0.0000
127.0.0.1 - - [13/Aug/2012 12:49:02] "GET /broadcast/hello HTTP/1.1" 200 26 0.00
00
127.0.0.1 - - [13/Aug/2012 12:57:00] "GET /consume HTTP/1.1" 200 - 0.0000

おそらく間違いは私のconfigu.ruファイルにあります:

require './streaming.rb'

run Sinatra::Application
4

3 に答える 3

1

シンでシナトラを実行します。:keep_openWebrickではサポートされていません。Sinatra1.3.3以降を実行していることを確認してください。

于 2012-08-13T13:19:11.333 に答える
1

私も同じ問題を抱えていました。応答を高速化するために、使用しました

before do
  content_type 'text/event-stream'
end
于 2012-08-28T20:17:53.290 に答える