【发布时间】:2013-05-15 15:50:57
【问题描述】:
我将 GraniteDS Gravity 用于我的消息传递服务。我的应用程序在使用数据轮询时工作正常,但是当我尝试使用 websocket 通道而不是数据轮询时,消息无法到达客户端。我还尝试修改由 Eclipse GraniteDS 插件创建的示例 Gravity 聊天应用程序以使用 websocket 通道,但它也不起作用。
我使用的是 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 策略监听器:
<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) 更新频道定义
旧:
<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>
新:
<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 会打印日志“重力成功启动”。但是生产者发送的消息没有到达消费者。
可能是什么问题?我在配置中遗漏了什么吗?
谢谢。
【问题讨论】:
标签: apache-flex websocket messaging gravity graniteds