2011-02-04 15 views
7

मैं एक बहुत ही बुनियादी सर्वर/क्लाइंट डेमो का प्रयास कर रहा हूं। मैं क्लाइंट पर सॉकेट.ओ (ब्राउज़र में एक उपयोगकर्ता) और सर्वर के लिए इवेंटमैचिन इको उदाहरण का उपयोग कर रहा हूं। आदर्श रूप से socket.io को सर्वर से अनुरोध भेजना चाहिए और सर्वर प्राप्त डेटा प्रिंट करेगा। दुर्भाग्यवश, कुछ ऐसा काम नहीं कर रहा है जैसा कि मैं उम्मीद करता हूं।socket.io और eventmachine ruby ​​

स्रोत यहाँ चिपकाया जाता है:

socket = new io.Socket('localhost',{ 
     port: 8080 
    }); 
    socket.connect(); 
    $(function(){ 
     var textBox = $('.chat'); 
     textBox.parent().submit(function(){ 
      if(textBox.val() != "") { 
       //send message to chat server 
       socket.send(textBox.val()); 
       textBox.val(''); 
       return false; 
      } 
     }); 
     socket.on('message', function(data){ 
      console.log(data); 
      $('#text').append(data); 
     }); 
    }); 

और यहाँ गहरे लाल रंग का कोड है:

require 'rubygems' 
require 'eventmachine' 
require 'evma_httpserver' 
class Echo < EM::Connection 
    def receive_data(data) 
    send_data(data) 
    end 
end 

EM.run do 
    EM.start_server '0.0.0.0', 8080, Echo 
end 

उत्तर

9

आप क्लाइंट कोड एक सर्वर WebSockets प्रोटोकॉल का उपयोग करने के लिए कनेक्ट करने के लिए कोशिश कर रहा है। हालांकि, आपका सर्वर कोड websockets कनेक्शन स्वीकार नहीं कर रहा है - यह केवल HTTP कर रहा है।

https://github.com/igrigorik/em-websocket

EventMachine.run { 

    EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws| 
     ws.onopen { 
      puts "WebSocket connection open" 

      # publish message to the client 
      ws.send "Hello Client" 
     } 

     ws.onclose { puts "Connection closed" } 
     ws.onmessage { |msg| 
      puts "Recieved message: #{msg}" 
      ws.send "Pong: #{msg}" 
     } 
    end 
} 
3

मैं Cramp का उपयोग कर इस पर गौर करेंगे:

एक विकल्प घटना मशीन WebSockets प्लगइन का उपयोग करने के लिए है। यह EventMachine के शीर्ष पर बने websockets समर्थन के साथ एक async ढांचा है। मैंने नमूने के साथ चारों ओर खेला है और मुझे यह मानना ​​है कि एपीआई सुरुचिपूर्ण और साफ दिखता है।

0

मैं Plezi पर देखता हूं।

आपका सर्वर साइड गूंज कोड कुछ इस तरह दिखाई दे सकता है:

require 'plezi' 

class EchoCtrl 
    def index 
     redirect_to 'http://www.websocket.org/echo.html' 
    end 
    def on_message data 
     # to broadcast the data add: 
     # broadcast :_send_message, data 
     _send_message data 
    end 
    def _send_message data 
     response << data 
    end 
end 

listen 

# you can add, a socket.io route for JSON with socket.io 
route '/socket.io', EchoCtrl 
route '/', EchoCtrl 

सिर्फ आईआरबी में यह भी लिखते हैं और एक बार आप exit आदेश का उपयोग कर आईआरबी से बाहर निकलने गूंज सर्वर चालू हो जाएंगे।

प्लेज़ी वेबसाइकिल, HTTP स्ट्रीमिंग और रीस्टफुल HTTP अनुरोधों के साथ काम करने और समर्थन करने के लिए वास्तव में मजेदार है, इसलिए लंबे समय तक खींचने और स्थिर सामग्री के साथ-साथ रीयल-टाइम अपडेट्स पर वापस आना आसान है।

प्लेज़ी ने रेडिस के लिए भी समर्थन में बनाया है, इसलिए प्रक्रियाओं और मशीनों में डेटा को धक्का देना संभव है।