首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在GraniteDS重力中使用websocket通道

在GraniteDS重力中使用websocket通道
EN

Stack Overflow用户
提问于 2013-05-13 02:40:39
回答 1查看 769关注 0票数 1

我正在为我的消息传递服务使用GraniteDS重力。我的应用程序在使用数据轮询时运行良好,但是当我尝试使用websocket通道而不是数据轮询时,消息无法到达客户端。我还尝试修改由Eclipse插件创建的示例重力聊天应用程序,以使用GraniteDS通道,但也不起作用。

我正在使用Tomcat 7.0.39

为了使案例更容易重现,我列出了我对Eclipse的GraniteDS插件创建的聊天应用程序所做的更改。

在web.xml中

1)修改servlet类:

旧:org.granite.gravity.servlet3.GravityAsyncServlet

新增:org.granite.gravity.tomcat.TomcatWebSocketServlet

2)修改了servlet映射的url模式

旧:/gravityamf/*

新增:/websocketamf/*

3)增加flash策略监听器:

代码语言:javascript
复制
<listener>
    <listener-class>org.granite.gravity.websocket.PolicyFileServerListener</listener-class>
</listener>

<context-param>
    <param-name>flashPolicyFileServer-allowDomains</param-name>
    <param-value>*:*</param-value>
</context-param>

在services-config.xml中

1)更新了通道定义

旧的:

代码语言:javascript
复制
<channel-definition
    id="gravityamf"
    class="org.granite.gravity.channels.GravityChannel">
    <endpoint
        uri="http://{server.name}:{server.port}/{context.root}/gravityamf/amf"
        class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>

新的:

代码语言:javascript
复制
<channel-definition 
    id="gravityamf"
    class="org.granite.gravity.channels.WebSocketChannel">
    <endpoint
        uri="http://{server.name}:{server.port}/{context.root}/websocketamf/amf"
        class="flex.messaging.endpoints.AMFEndpoint" />
</channel-definition>

我没有更改flex客户端。当我启动应用程序时,Tomcat会打印日志"Gravity“。但是生产者发送的消息不会到达消费者。

可能的问题是什么?我是否在配置中遗漏了什么?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-15 15:50:58

经过4天与代码的斗争,我找到了问题的原因。首先,我在客户端调试producer.send()消息时发现了错误消息。尝试连接套接字时抛出以下异常

代码语言:javascript
复制
"cannot connect to Web Socket server at 
 http://localhost:8080/gravityTest/websocketamf/amf
(IoError: Error #2031: Socket Error. URL: localhost)"

但是抛出的异常并没有达到顶层,所以我在很长一段时间内都不能了解这个异常。

在googling了这个异常之后,我发现它是由flash安全策略引起的。然后,我调试了PolicyFileServerListener,发现绑定后的策略服务器的localAddress是[/0:0:0:0:0:0:0:0:843],因为它使用的是InetSocketAddressIPv6。我猜这是JDK 1.7的默认行为。当我将JDK的版本改为1.6时,localAddress变成了[/0.0.0.0:843]。在此更改之后,我的应用程序成功地访问了策略服务器,并且使用websocket进行消息传递工作得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16510779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档