2013-04-01 7 views
9

मैं अपने आवेदन में सर्वर-प्रेषित घटनाओं का लाभ उठाने की कोशिश कर रहा हूं। मैं सिनात्रा और sinatra-sse मणि का उपयोग कर रहा हूं। यह मणि सिनात्रा stream :keep_alive कॉल को लपेटता है।प्यूमा के साथ सिनात्रा स्ट्रीमिंग?

थिन पर अपना आवेदन चलाते समय, मुझे बिल्कुल कोई समस्या नहीं है, और मेरी घटना स्ट्रीम अपेक्षा के अनुसार काम करती है। हालांकि, जब मैंने अपने आवेदन को प्यूमा के साथ चलाने के लिए स्विच किया, तो सब कुछ काम करता है, मेरे sse_stream को छोड़कर बिल्कुल कुछ भी नहीं है! यह सिर्फ एक खाली पृष्ठ देता है।

@@puma_instance = Puma::Server.new MyApp::WebUI 
@@puma_instance.add_tcp_listener ip, port 
@@puma_instance.run 

किसी भी विचार क्या हो रहा है:

मेरे धारा इतनी तरह तो

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 

मैं शुरू कर पतला तरह की स्थापना की है? किसी भी सहायता की सराहना की जाएगी।

संपादित करें: मैं जोड़ने चाहिए कि अपने आवेदन EventMachine का उपयोग करता है: कुछ अधिक जानकारी यह cURL क्या जब प्यूमा

$ 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 

$ 

पर चल रहा है जबकि यह पतला

$ 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> 

संपादित करें पर क्या होता है देता है इसके मूल पर, sinatra_sse ईएम के युग्मन की संभावना सबसे अधिक संभावना नहीं है।

उत्तर

3

मेरा मानना ​​है कि यह समस्या EventMachine लाइब्रेरी के sinatra-sse के explicit use के आसपास घूमती है, जो does not list as a dependency है। हालांकि, यह Gemfile में पतला सूचीबद्ध करता है और EventMachine Thin की मुख्य निर्भरता है।

प्यूमा का समवर्ती मॉडल quite different है। इस क्षमता बंद कर देते हैं इस तरह पतला के रूप में

प्यूमा अभी भी अवरुद्ध आईओ एक समय पर होने की अनुमति देकर एमआरआई प्रवाह क्षमता को बेहतर बनाता है (EventMachine आधारित सर्वर: वास्तव में, आप सही परियोजना की README के शीर्ष पर निम्नलिखित बयान मिल जाएगा , आपको विशेष पुस्तकालयों का उपयोग करने की आवश्यकता है)।

संपादित

आप रैक के बारे में और अधिक जानने में रुचि रखते हैं, रेल, प्यूमा, और SSE, आप this great blog post हारून पैटरसन, रूबी/रेल कोर सदस्य और ऑल-अराउंड प्रफुल्लित द्वारा आनंद ले सकता है पुरुष।

+0

ठीक है, मेरा एप्लिकेशन EventMachine का भी उपयोग करता है, इसलिए मुझे नहीं लगता कि यह EventMachine के चलते नहीं है। इसके अलावा आपके द्वारा लिंक की गई विशेष पंक्ति का उपयोग केवल डेटा को भेजे जाने पर कनेक्शन को खोलने के लिए किया जाता है। मेरा आवेदन नियमित रूप से डेटा की एक उदार राशि भेजता है, इसलिए मुझे नहीं लगता कि इसके साथ कुछ भी करना है:/ –

+1

@IlyaO। Async.callback के पुमा कार्यान्वयन के लिए रोडब्लॉक को रेखांकित करने वाले पुमा गिथब मुद्दे के लिंक के साथ बस मेरा जवाब संपादित किया। –

+0

बस टिकट एक टक्कर दिया। अगर आपको किसी और को जोड़ने के लिए कुछ भी नहीं है तो मैं आपको बक्षीस दूंगा। –

संबंधित मुद्दे