我正在为我的消息服务使用 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 打印日志“重力成功启动”。但是生产者发送的消息没有到达消费者。
可能是什么问题?我在配置中遗漏了什么吗?
谢谢。