10.13.1 Remoting 연결(Remoting Connection)

10.13.1 Remoting 연결(Remoting Connection)

remoting을 사용하려면 연결이 설정되어 있어야 합니다. Haxe Remoting 연결에는 두 종류가 있습니다:

  • haxe.remoting.Connection: 동기 연결(synchronous connections)에 사용되며, 메서드를 호출할 때 결과를 직접 얻을 수 있습니다.
  • haxe.remoting.AsyncConnection: 비동기 연결(asynchronous connections)에 사용되며, 결과는 실행 과정에서 나중에 발생하는 이벤트입니다.
연결 시작(Start a connection)

연결을 설정하는 데 사용할 수 있는 목적이 다른 몇 가지 타깃 특정 생성자가 있습니다:

  • 모든 타깃:
    • HttpAsyncConnection.urlConnect(url:String) Haxe 서버 애플리케이션에 연결되어야 하는 주어진 URL에 대한 비동기 연결을 반환합니다.
  • Flash:
    • ExternalConnection.jsConnect(name:String, ctx:Context) 로컬 JavaScript Haxe 코드에 연결을 허용합니다. JS Haxe 코드는 ExternalConnection 클래스를 포함해 컴파일되어야 합니다. 이는 Flash Player 8 이상에서만 작동합니다.
    • AMFConnection.urlConnect(url:String)AMFConnection.connect( cnx : NetConnection ) Flash Media ServerAMFPHP 같은 AMF Remoting 서버에 연결을 허용합니다.
    • SocketConnection.create(sock:flash.XMLSocket) XMLSocket을 통한 remoting 통신을 허용합니다.
    • LocalConnection.connect(name:String) Flash LocalConnection을 통한 remoting 통신을 허용합니다.
  • JavaScript:
    • ExternalConnection.flashConnect(name:String, obj:String, ctx:Context) 주어진 Flash Object에 연결을 허용합니다. Haxe Flash 콘텐츠가 로드되어야 하며 haxe.remoting.Connection 클래스를 포함해야 합니다. 이는 Flash 8 이상에서만 작동합니다.
  • Neko:
    • HttpConnection.urlConnect(url:String) 비동기 버전처럼 작동하지만 동기 모드에서 작동합니다.
    • SocketConnection.create(...) 서버에 연결하기 위해 XMLSocket을 사용하는 Flash 클라이언트와 실시간 통신을 허용합니다.
Remoting 컨텍스트(Remoting context)

플랫폼 간에 통신하기 전에 remoting 컨텍스트를 정의해야 합니다. 이는 클라이언트 코드에서 연결에서 호출할 수 있는 공유 API입니다.

이 서버 코드 예는 API를 만들고 공유합니다:

class Server {
    function new() { }
    function foo(x, y) { return x + y; }

    static function main() {
        var ctx = new haxe.remoting.Context();
        ctx.addObject("Server", new Server());

        if(haxe.remoting.HttpConnection.handleRequest(ctx))
        {
            return;
        }

        // 일반 요청 처리
        trace("This is a remoting server !");
    }
}
연결 사용(Using the connection)

연결 사용은 꽤 편리합니다. 연결을 얻으면 고전적인 점 접근으로 경로를 평가한 다음 call()을 사용해 remoting 컨텍스트에서 메서드를 호출하고 결과를 얻습니다. 비동기 연결은 결과를 사용할 수 있을 때 호출될 추가 함수 매개변수를 받습니다.

이 클라이언트 코드 예는 서버 remoting 컨텍스트에 연결하고 그 API에서 함수 foo()를 호출합니다.

class Client {
  static function main() {
    var cnx = haxe.remoting.HttpAsyncConnection.urlConnect("http://localhost/");
    cnx.setErrorHandler( function(err) { trace('Error: $err'); } );
    cnx.Server.foo.call([1,2], function(data) { trace('Result: $data'); });
  }
}

이것이 Neko 타깃에서 작동하게 하려면 Neko 웹 서버를 설정하고, Client의 url을 "http://localhost:2000/remoting.n"으로 가리키고, --main Server --neko remoting.n으로 Server를 컴파일하세요.

오류 처리(Error handling)

비동기 호출에서 오류가 발생하면 위 예에서 본 것처럼 오류 핸들러가 호출됩니다.

동기 호출에서 오류가 발생하면 지역 메서드를 호출하는 것처럼 호출자 측에서 예외가 발생합니다.

데이터 직렬화(Data serialization)

Haxe Remoting은 많은 종류의 데이터를 보낼 수 있습니다. Serialization 참조.

관련 내용

클래스에 대한 더 많은 세부 사항은 API 문서의 remoting 패키지를 참조하세요.

출처: Remoting Connection

더 알아보기