Tôi đang cố gắng tận dụng sự kiện Máy chủ gửi trong ứng dụng của mình. Tôi đang sử dụng Sinatra và đá quý sinatra-sse
. Viên ngọc này kết thúc cuộc gọi Sinatra stream :keep_alive
.Sinatra trực tuyến với Puma?
Khi chạy ứng dụng của tôi trên Thin, tôi hoàn toàn không có vấn đề gì và luồng sự kiện của tôi hoạt động như mong đợi. Tuy nhiên, khi tôi chuyển ứng dụng của mình để chạy với Puma mọi thứ hoạt động, ngoại trừ sse_stream
của tôi hoàn toàn không làm gì cả! Nó chỉ trả về một trang trống.
dòng của tôi được thiết lập như vậy
get "/logstream/:server" do
if rbcserver = MyApp.servers[params[:server]]
sse_stream do |stream|
rbcserver.add_web_logger(stream)
stream.callback { rbcserver.remove_web_logger(stream) }
end
else
error 404
end
end
tôi bắt đầu mỏng như vậy:
@@puma_instance = Puma::Server.new MyApp::WebUI
@@puma_instance.add_tcp_listener ip, port
@@puma_instance.run
Bất cứ ý tưởng gì đang xảy ra? Bất kỳ trợ giúp sẽ được đánh giá cao.
EDIT: một số thông tin hơn Đây là những gì cURL cho khi chạy trên Puma
$ curl -L -b cookies.txt -c cookies.txt -i http://localhost:9001/logstream/myserver
HTTP/1.1 200 OK
Content-Type: text/event-stream;charset=utf-8
X-Content-Type-Options: nosniff
Transfer-Encoding: chunked
$
Trong khi đây là những gì xảy ra trên Thin
$ curl -L -b cookies.txt -c cookies.txt -i http://localhost:9001/logstream/myserver
HTTP/1.1 200 OK
Content-Type: text/event-stream;charset=utf-8
X-Content-Type-Options: nosniff
Connection: close
Server: thin 1.5.1 codename Straight Razor
event: <event name>
data: <my data>
event: <event name>
data: <my data>
<continues as more data comes in>
EDIT: Tôi nên thêm rằng ứng dụng của tôi sử dụng EventMachine ở cốt lõi của nó, do đó, việc ghép nối với EM của sinatra_sse
rất có thể không phải là vấn đề.
Vâng, ứng dụng của tôi sử dụng EventMachine là tốt, vì vậy tôi không nghĩ rằng điều này là do EventMachine không chạy. Ngoài ra, dòng cụ thể mà bạn liên kết dường như chỉ được sử dụng để duy trì kết nối khi không có dữ liệu được gửi. Ứng dụng của tôi gửi lượng dữ liệu phong phú thường xuyên, vì vậy tôi không nghĩ rằng có bất kỳ điều gì liên quan đến nó:/ –
@IlyaO. Chỉ cần chỉnh sửa câu trả lời của tôi với một liên kết đến một vấn đề github Puma phác thảo các rào chắn cho việc thực hiện Puma của async.callback. –
Chỉ cần đưa cho một tấm vé. Tôi sẽ cung cấp cho bạn tiền thưởng nếu không ai khác có bất cứ điều gì để thêm vào. –