2012-12-20 4 views
0

"실제 서버"에서 웹 클라이언트로 메시지를 전달하기 위해 웹 서버를 다른 서버에 래퍼로 ​​사용할 수 있습니까?wrap 소켓과 websocket

나는 OS가 묶인 클라이언트가있는 Ada로 작성된 게임 서버를 가지고 있기 때문에 궁금하다. 이 클라이언트를 Javascript 기반의 웹 클라이언트로 바꿔서 일반 브라우저에서 게임을 즐길 수 있습니다. 무엇을 할 수 있습니까?

+0

웹 서버에 따라 달라집니다. – Philipp

+1

Google "html5 원격 데스크톱" – Barmar

+0

아, 그러면 제대로 작동하는 것 같습니다. 아마 융통성이 있고 웹 인터페이스의 다른 부분을 위해 그것을 사용하려고하는 im은 루비에서 아마 sinibra 웹 서버를 사용할 것입니다. –

답변

0

나는 내 소켓을 포장하기 위해 루비에서 다음 코드를 사용했다. 코드는 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 

즐기십시오! 질문이 있는지 물어보십시오.

1

웹 소켓은 사람들이 생각하는 것과는 달리 순수한 소켓이 아닙니다. 원시 데이터는 아직 광범위하게 지원되지 않는 websocket 프로토콜에 의해 캡슐화되고 마스크됩니다. 즉,이를 위해 설계되지 않은 응용 프로그램을 의미합니다. 웹 소켓을 통해 직접 통신 할 수 없습니다.

일반 소켓을 기반으로하는 프로토콜을 사용하는 응용 프로그램에서 웹 소켓과 통신하려는 경우 다음 두 가지 옵션이 있습니다.

websocket 트래픽을 포장 풀기/패킹하는 순수한 소켓 트래픽으로 응용 프로그램에 전달하는 websocket 게이트웨이를 사용하십시오. 이렇게하면 응용 프로그램을 수정할 필요가 없다는 이점이 있지만 특정 응용 프로그램에 문제가 있거나 없을 수도있는 클라이언트의 실제 IP 주소를 숨길 수 있다는 단점이 있습니다.

또는 애플리케이션에 websocket을 직접 구현하십시오. 서버가 수신 대기하는 두 개의 다른 포트 (정상 연결 용 포트와 websocket 연결 용 포트)를 사용하면이 작업을 수행 할 수 있습니다. websocket-port를 통해 수신되거나 전송 된 모든 데이터는 보내거나 받기 전에 websocket 구현을 통해 보내지고 다른 루틴에 의해 처리됩니다.

3

이것이 바로 websockify의 목적입니다. WebSocket 클라이언트와 일반 TCP 서버 사이를 연결하도록 설계되었습니다. 이 파일은 일반 VNC 서버에 연결할 수있는 HTML5 VNC 앱인 noVNC의 일부로 만들어졌습니다. 그러나 websockify는 일반적이며 다른 많은 프로젝트에서 사용하고 있습니다.

면책 사항 : websockify 및 noVNC를 만들었습니다.

1

Kaazing HTML5 Gateway는 TCP 기반 프로토콜을 웹 클라이언트로 가져 오는 좋은 방법입니다. Kaazing 게이트웨이는 기본적으로 TCP 위에서 실행되는 프로토콜을 가져와 클라이언트의 프로토콜에 액세스 할 수 있도록 WebSocket으로 변환합니다. 백엔드에서 사용하는 프로토콜 용 JavaScript 프로토콜 라이브러리를 작성해야합니다. 그러나 TCP를 기반으로 프로토콜을 사용하여 작업 할 수 있다면 JavaScript로 수행하기가 어렵지 않습니다.

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

AWS에서 WebSocket을위한 지원이, 그리고 정상 소켓 지원을위한 우수한 소켓 (AWS.Net) 패키지의 당신은 사용할 수있다 :

2

쉽게 사용 AWS하여이 작업을 수행 할 수 있습니다.