2012-06-06 104 views
1

我正在用netty创建我自己的Flash游戏服务器。我在端口843中使用Flash策略服务器,在8080中使用游戏服务器端口...另外,我正在使用zerodelimeter进行成帧;但是,当我在Flash客户端上收到消息时,我收到了两条消息而不是一条消息。第一条信息是我应该得到的真实信息;然而,第二个是空的信息。我怎样才能避免在网络端收到第二条消息?Netty Flash XmlSocket消息接收错误

感谢,

在下面,你可以看看我的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' }) }; 
    } 

} 

回答

0

,我认为你应该使用nul delimiter而不是0.这是一个netty game server供应闪存政策文件。 policy server运行在843.下面粘贴的是相关的弹簧配置,这里是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

恐怕它没有工作。我试过null分隔符而不是“\ 0”;但是,flash xmlsocket对象并未触发消息接收事件。此外,我试过null分隔符和“\ 0”,导致两条消息,而不是一条消息。 –

+0

您是否尝试过我已链接的解码器?您实际上可以解码并查看帧为什么具有额外的字节。这可能会提供一个线索。 – Abe