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服务器

Flash 客户端 XMLSocket 未连接到服务器

PHP 读取原始发布数据,对于从Flash XmlSocket中获取XML非常有用。

flash xmlsocket连接主机是不是需要专用IP?

[AS3]XMLSocket通讯的安全策略设置

XMLSocket 在 Firefox 中工作,但不在 IE 中