7

非常に基本的なサーバー/クライアントのデモを試しています。クライアント(ブラウザのユーザー)でsocket.ioを使用し、サーバーのeventmachine Echoの例を使用しています。理想的には、socket.io がサーバーにリクエストを送信し、サーバーが受信したデータを出力する必要があります。残念ながら、何かが期待どおりに機能していません。

ソースはここに貼り付けられます:

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
4

3 に答える 3

9

クライアント コードは、websockets プロトコルを使用してサーバーに接続しようとしています。ただし、サーバー コードは Websocket 接続を受け入れていません。HTTP のみを実行しています。

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

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
}
于 2011-04-19T17:41:19.027 に答える
3

Crampの使用を検討します。EventMachine の上に構築された、websockets をサポートする非同期フレームワークです。サンプルをいじってみましたが、API がエレガントできれいに見えることは認めざるを得ません。

于 2012-03-23T05:43:38.397 に答える
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 に入力するだけで、コマンドを使用して IRB を終了すると、エコー サーバーが実行を開始しますexit

Plezi は、Websocket、HTTP ストリーミング、および RESTful HTTP リクエストを使用してサポートするのが非常に楽しいため、ロングプルに簡単にフォールバックして、静的コンテンツやリアルタイムの更新を提供できます。

Plezi には Redis のサポートも組み込まれているため、プロセスやマシン間でデータをプッシュすることができます。

于 2014-12-07T11:50:32.903 に答える