🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
为了使用 remoting ,必须有一个连接建立。有两种Haxe 远程连接: * haxe.remoting.Connection 是用于同步连接,调用一个方法时结果可以直接获得。 * haxe.remoting.AsyncConnection 用于异步连接,结果是在执行过程中之后发生的事件。 ## 启动一个连接 有一些目标平台特定的构造函数用于不同的目的,可以用来设置一个连接: * 所有目标平台 * `HttpAsyncConnection.urlConnect(url:String)` : 返回一个到指定URL的异步连接,可以连接到一个Haxe服务端应用。 * Flash * `ExternalConnection.jsConnect(name:STRING, ctx:Context)` : 允许一个到本地JavaScript Haxe 代码的连接。JS Haxe代码必须被包含 ExternalConnection 类进行编译。这只适用于Flash Player 8 和更高版本。 * `AMFConnection.urlConnect(url:String) 和 AMFConnection.connect(cnx: NetConnection)` : 允许到一个[AMF远程服务器](http://en.wikipedia.org/wiki/Action_Message_Format)(如[Flash 媒体服务器](http://www.adobe.com/products/adobe-media-server-family.html)或者 [AMFPHP](http://www.silexlabs.org/amfphp/))的连接。 * `SocketConnection.create(sock:flash.XMLSocket)` : 允许在XMLSocket上进行远程通讯。 * `LocalConnection.connect(name:String)`: 允许在Flash LocalConnection上进行远程通讯。 * JavaScript * ExternalConnection.flashConnect(name:String, obj:String, ctx:Context) 允许连接到一个指定的Flash对象。Haxe Flash内容必须被加载,并且它必须包含 haxe.remoting.Connection 类。只用于Flash8 或更高版本。 * Neko * HttpConnection.urlConnect(url:String) 像异步版本一样使用,但是在同步模式下工作。 * SocketConnection.create(...) 允许实时和一个使用一个XML Socket来连接服务的Flash客户端通讯。 ## 远程上下文 在平台之间通讯之前,一个远程处理的上下文必须被定义。这是一个可以被客户端代码的连接上调用的共享的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; } // handle normal request trace("This is a remoting server !"); } } ~~~ ## 使用连接 连接使用起来非常方便。一旦连接被获得,使用经典的点语法来屏幕一个路径,然后使用 call() 调用远程上下文中的方法,并获得结果。异步连接接受一个附加的函数参数,在结果获得之后被调用。 客户端代码示例连接到服务端远程上下文并调用这个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 Web 服务器,指向Client中的url到 “http://localhost:2000/remoting.n” ,并使用 -main Server -neko remoting.n 编译 Server 。 ## 错误处理 * 当在异步调用中发生一个错误,就像上面例子中看到的,错误处理程序将被调用。 * 当在同步调用中发生一个错误,在访客端一个异常被抛出,就像我们调用一个本地方法。 ## 数据序列化 Haxe 远程处理可以发送多种不同种类的数据。查看 序列化(第10.8节)。 查看API文档中的 remoting 包 详细了解它的类。