2011-02-04 33 views
7

Çok basit bir sunucu/istemci demosu çalışıyorum. İstemcide socket.io (tarayıcıda bir kullanıcı) ve sunucu için eventmachine Echo örneği kullanıyorum. İdeal socket.io sunucuya bir istek göndermeli ve sunucu alınan verileri yazdıracaktır. Ne yazık ki, bir şey beklediğim gibi çalışmıyor.socket.io ve ruby ​​içinde eventmachine

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); 
     }); 
    }); 

ve burada yakut kodu:

Kaynak burada yapıştırılır

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 

cevap

9

istemci kod WebSockets protokolü kullanılarak bir sunucuya bağlanmaya çalışıyor. Ancak, sunucu kodunuz websockets bağlantılarını kabul etmiyor - sadece HTTP yapıyor.

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

ben Cramp kullanarak içine bakmak istiyorum:

Seçeneklerden biri olay makinesi WebSockets eklentisi kullanmaktır. EventMachine üzerine kurulu, websockets desteğine sahip bir async framework. Örneklerle oynadım ve API'nın zarif ve temiz olduğunu itiraf etmeliyim.

0

Plezi'a bakardım.

Sunucu tarafı yankı kod şöyle görünebilir:

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 

sadece IRB yazın ve exit komutunu kullanarak KİK çıkış yaptıktan sonra yankı sunucu yayınlanmaya başlayacak.

Plezi, Websockets, HTTP Streaming ve RESTful HTTP istekleri ile çalışmak ve bunları desteklemek için gerçekten eğlencelidir, böylece uzun süreli çekmeye ve gerçek zamanlı güncellemelere ek olarak statik içeriklere geri dönmeyi kolaylaştırır.

Plezi ayrıca Redis için destek sağlamıştır, bu nedenle verileri işlem ve makineler arasında itmek mümkündür.