【问题标题】:Netty Flash XmlSocket Message Receiving ErrorNetty Flash XmlSocket 消息接收错误
【发布时间】: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' }) };
    }

}

【问题讨论】:

    标签: flash netty xmlsocket


    【解决方案1】:

    我认为您应该使用 nul delimiter 而不是 0。这是一个提供闪存策略文件的 netty game serverpolicy 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”,这导致两条消息而不是一条消息。
    • 你试过我链接的解码器了吗?您实际上可以解码并查看为什么该帧具有额外的字节。这可能会提供线索。
    猜你喜欢
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2018-03-30
    • 2013-12-06
    • 2011-10-21
    • 2023-03-12
    • 2018-04-26
    • 2013-07-25
    相关资源
    最近更新 更多