2011-02-04 17 views
7

私は非常に基本的なサーバー/クライアントのデモを試しています。私はクライアント(ブラウザのユーザ)上でsocket.ioを使用しており、サーバのイベントマシンのエコーの例を使用しています。理想的にはsocket.ioはサーバーに要求を送信し、サーバーは受信したデータを出力します。残念ながら、私はそれが期待どおりに動作していません。ruby​​のsocket.ioと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); 
     }); 
    }); 

、ここでは、Rubyのコードです:

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

あなたのクライアントコードは、WebSocketをプロトコルを使用してサーバーに接続しようとしています。しかし、あなたのサーバーコードはWebSocket接続を受け付けていません - HTTPだけです。

1つのオプションは、イベント・マシンのWebSocketプラグインを使用することです:

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を使用してに見えると思います。これは、EventMachineの上に構築されたWebソケットサポートを持つ非同期フレームワークです。私はサンプルを使って遊んだので、APIがエレガントできれいに見えることを認めなければなりません。

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 

がちょうどIRBに入力して、あなたがexitコマンドを使用してIRBを終了した後、エコーサーバが実行を開始します。

Pleziはウェブソケット、HTTPストリーミング、RESTful HTTPリクエストを扱い、サポートすることは本当に面白いので、リアルタイムでの更新だけでなく、長期間の引き継ぎや静的コンテンツの配信にも簡単に戻れます。

PleziもRedisをサポートしているため、プロセスとマシン間でデータをプッシュすることができます。

関連する問題