gpt4 book ai didi

apache-flex - 如何在正在运行的 flex 应用程序中获取服务器端点?

转载 作者:行者123 更新时间:2023-12-04 17:29:14 26 4
gpt4 key购买 nike

我需要一种在运行时从我的 flex 应用程序中获取事件服务器地址、端口和上下文的方法。由于我们在构建过程中使用 ant,服务器连接信息是在我们的构建属性文件中动态指定的,并且在 services-config 中使用了 {server.name}、{server.port} 和 {context.root} 占位符.xml 文件而不是实际值。

我们有一些其他 Java servlet 与我们的 blazeDS 服务器在同一台机器上运行,我想要某种方式来以编程方式确定服务器端点信息,因此我不需要将 servlet URL 硬编码到 XML 文件中(这就是我们目前正在做)。

我发现至少可以通过将以下内容添加到我们的主应用程序 MXML 文件中来获取上下文根:

<mx:Application ... >
<mx:HTTPService id="contextRoot" rootURL="@ContextRoot()"/>
</mx:Application>

但是,我仍然需要一些获取服务器地址和端口的方法,如果我通过给出 -context-root= http://myserver.com:8080/mycontext 来指定整个地址,然后 flex 应用程序尝试连接到 http://localhost/http://myserver.com:8080/mycontext/messagebroker/amf ,这当然是完全错误的。指定上下文根和服务器 URL 的正确方法是什么,如何从我们的应用程序中检索它们?

最佳答案

我们使用提供以下方法的 Application 子类:

 /**
* The URI of the AMF channel endpoint. <br/>
* Default to #rootURI + #channelEndPointContext + #this.channelEndPointPathInfo
*/
public function get channelEndPointURI() : String
{
return this.rootServerURI + ( this.channelEndPointContext ? this.channelEndPointContext : "" ) + this.channelEndPointPathInfo
}

/**
* The root URI (that is scheme + hierarchical part) of the server the application
* will connect to. <br/>
* If the application is executing locally, this is the #localServerRootURI. <br/>
* Else it is determined from the application #url. <br/>
*/
public function get rootServerURI() : String
{
var result : String = ""
if ( this.url && ( this.url.indexOf("file:/") == -1 ) )
{
var uri : URI = new URI( this.url )
result = uri.scheme + "://" + uri.authority + ":" + uri.port
}
else
{
result = this.localServerRootURI
}

return result
}

此通用应用程序支持 channelEndPointContext , channelEndPointPathInfolocalServerRootURI属性(在您的示例中通常是“mycontext”和“/messagebroker/amf/”,通过 Flex Builder 执行应用程序时使用的本地服务器根目录,在这种情况下它有一个 file:// URL)。
然后使用 localServerRootURI 来确定完整的端点 URI。属性(property)或使用应用程序 url因为我们的服务是由为应用程序的 SWF 提供服务的同一台服务器公开的(据我所知,这也是您的情况)。

所以,在你的例子中,人们会写:
 <SuperApplication ...> <!-- SuperApplication is the enhanced Application subclass -->
<mx:HTTPService id="myHTTPService" url="{this.channelEndPointURI}"/>
</SuperApplication>

从这里开始,还可以自动判断 channelEndPointContext从应用程序 URL 而不是硬编码,如本例所示。

关于apache-flex - 如何在正在运行的 flex 应用程序中获取服务器端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/730490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com