Netty Flash XmlSocket 消息接收错误
Posted
技术标签:
【中文标题】Netty Flash XmlSocket 消息接收错误【英文标题】:Netty Flash XmlSocket Message Receiving Error 【发布时间】:2012-06-10 17:01:01 【问题描述】:我正在 netty 中创建自己的 Flash 游戏服务器。我在端口 843 中使用 flash 策略服务器,在 8080 中使用游戏服务器端口......另外,我使用 zerodelimeter 进行成帧;但是,当我在 flash 客户端上接收消息时,我收到了两条消息而不是一条消息。第一条信息是我应该得到的真实信息;但是,第二个是空消息。如何避免在 netty 端收到第二条消息?
谢谢,
在下面,你可以看看我的ChannelPipelineFactory...
public class SocketServerPipelineFactory implements ChannelPipelineFactory
public ChannelPipeline getPipeline() throws Exception
PlayerController controller = PlayerController.createPlayerController();
ChannelPipeline pipeline = Channels.pipeline();
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192,
zeroDelimiter()));
pipeline.addLast("decoder", new StringDecoder(CharsetUtil.UTF_8));
pipeline.addLast("encoder", new StringEncoder(CharsetUtil.UTF_8));
pipeline.addLast("handler", new SocketServerHandler(controller));
return pipeline;
public static ChannelBuffer[] zeroDelimiter()
return new ChannelBuffer[] ChannelBuffers.wrappedBuffer(new byte[] '\0' ),
ChannelBuffers.wrappedBuffer(new byte[] '\r', '\n' ) ;
【问题讨论】:
【参考方案1】:我认为您应该使用 nul delimiter 而不是 0。这是一个提供闪存策略文件的 netty game server。 policy server在843运行。下面贴的是相关的spring配置,这里是policy file decoder供参考。
<!-- Configure the Flash policy server. By default it runs at 843 -->
<bean id="flashPolicyServer" class="org.menacheri.jetserver.server.netty.FlashPolicyServer"
init-method="createServerBootstrap" destroy-method="stopServer">
<property name="pipelineFactory" ref="flashPolicyServerPipelineFactory"></property>
<property name="gameAdminService" ref="gameAdminService"></property>
<property name="portNumber" value="$flash.policy.port"></property>
</bean>
<!-- All the pipeline factory beans are now defined -->
<bean id="flashPolicyServerPipelineFactory" class="org.menacheri.jetserver.server.netty.FlashPolicyServerPipelineFactory">
<lookup-method name="getFlashPolicyServerHandler" bean="flashPolicyServerHandler"/>
<property name="timer" ref="hashedWheelTimer"></property>
</bean>
【讨论】:
恐怕不行。我尝试了空分隔符而不是“\0”;但是,flash xmlsocket 对象没有触发消息接收事件。另外,我尝试了空分隔符和“\0”,这导致两条消息而不是一条消息。 你试过我链接的解码器了吗?您实际上可以解码并查看为什么该帧具有额外的字节。这可能会提供线索。以上是关于Netty Flash XmlSocket 消息接收错误的主要内容,如果未能解决你的问题,请参考以下文章
Flash客户端XMLsocket无法连接到python服务器