0

WebSocketを備えたWebサーバーを別のサーバーへのラッパーとして使用して、「実サーバー」からWebクライアントにメッセージを渡したり戻したりすることは可能ですか?

OSに接続されたクライアントを持つAdaで書かれたゲームサーバーを持っているので、これに興味があります。このクライアントをJavascriptベースのWebクライアントに交換して、通常のブラウザでゲームをプレイできるようにしたいと思います。何ができる?

4

5 に答える 5

3

それがwebsockifyの目的です。これは、WebSocketクライアントと通常のTCPサーバーの間を橋渡しするように設計されています。これは、通常のVNCサーバーに接続できるHTML5VNCアプリであるnoVNCの一部として作成されました。ただし、websockifyは一般的なものであり、現在、それを使用している他の多くのプロジェクトがあります。

免責事項:websockifyとnoVNCを作成しました。

于 2012-12-20T15:48:42.167 に答える
2

AWSを使用すると、これを簡単に実現できます。

http://libre.adacore.com/tools/aws/

AWSではWebSocketがサポートされており、通常のソケットサポートに優れたソケット(AWS.Net)パッケージを利用できます。

于 2012-12-26T08:00:21.893 に答える
1

Kaazing HTML5 Gatewayは、TCPベースのプロトコルをWebクライアントに提供するための優れた方法です。Kaazingゲートウェイは基本的に、TCP上で実行されているプロトコルを取得し、それをWebSocketに変換して、クライアントでプロトコルにアクセスできるようにします。バックエンドが使用するプロトコル用のJavaScriptプロトコルライブラリを作成する必要があります。しかし、TCP上でプロトコルを操作できるのであれば、JavaScriptを使用して操作するのは難しくありません。

于 2012-12-21T06:46:36.643 に答える
1

WebSocketは、一部の人々が信じていることに反して、純粋なソケットではありません。生データは、まだ広くサポートされていないWebSocketプロトコルによってカプセル化およびマスクされます。つまり、そのために設計されていないアプリケーションは、Webソケットを介して直接通信することはできません。

通常のソケットに基づくプロトコルを使用するアプリケーションがあり、WebSocketと通信する場合は、2つのオプションがあります。

WebSocketトラフィックの解凍/パッキングを実行し、それを純粋なソケットトラフィックとしてアプリケーションに転送するWebSocketゲートウェイを使用するか。これには、アプリケーションを変更する必要がないという利点がありますが、特定のアプリケーションで問題になる場合と問題にならない場合があるクライアントの実際のIPアドレスもマスクされるという欠点があります。

または、アプリケーションにWebSocketを直接実装します。これは、サーバーがリッスンする2つの異なるポート(1つは通常の接続用、もう1つはWebSocket接続用)を使用することで実行できます。websocket-portを介して受信または送信されるデータは、送信前/受信後にWe​​bSocket実装を介して送信され、それ以外の場合は同じルーチンによって処理されます。

于 2012-12-20T11:46:25.827 に答える
0

ソケットをラップするために、rubyで次のコードを使用しました。コードはem-websocket-proxyから採用されました。私のプロジェクトにはいくつかの詳細があるかもしれませんが、通常、remote_hostとremote_portを切り替えて、localhost:3000に接続すると、WebSocketを介したサーバーへの新しい接続が設定されます。

require 'rubygems'
require 'em-websocket'
require 'sinatra/base'
require 'thin'
require 'haml'
require 'socket'


class App < Sinatra::Base
    get '/' do
        haml :index
    end
end

class ServerConnection < EventMachine::Connection

  def initialize(input, output)
    super
    @input = input
    @output = output
    @input_sid = @input.subscribe { |msg| send_data msg+ "\n" }
  end

  def receive_data(msg)
    @output.push(msg)
  end

  def unbind
    @input.unsubscribe(@input_sid)
  end

end

# Configuration of server
options = {:remote_host => 'your-server', :remote_port => 4000}

EventMachine.run do   

  EventMachine::WebSocket.start(:host => '0.0.0.0', :port => 8080) do |ws|
    ws.onopen {
      output = EM::Channel.new
      input = EM::Channel.new

      output_sid = output.subscribe { |msg| ws.send msg; }

      EventMachine::connect options[:remote_host], options[:remote_port], ServerConnection, input, output

      ws.onmessage { |msg| input.push(msg)}

      ws.onclose {
        output.unsubscribe(output_sid)
      }
    }
  end

  App.run!({:port => 3000})   

end

楽しみ!そして、質問があるかどうか尋ねてください。

于 2013-01-08T03:04:52.910 に答える