2012-06-06 195 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