Netty

1. Introduction

    Netty can be used to build a network server or connect to the server as a network client, supporting multiple protocols.

2. Server example

    Sample code of the server combined with Google's protobuf.

<?xml version='1.0' encoding='utf-8'?>

<NettyServer name="ProtoNettyServer" descriptors="xworker.netty.NettyServer" port="6000">
     <Handlers>
         <IdleStateHandler event="true">
             <actions descriptors="xworker.netty.handlers.TimeoutHandler/@actions1">
                 <GroovyAction name="onWriterIdle" descriptors="xworker.groovy.GroovyAction">
                     <code><![CDATA[def proto = world.getThing("xworker.protobuf.examples.ProtoExample");
def messageFactory = proto.doAction("getMessageFactory", actionContext);

def heartBeat = messageFactory.newBuilder("HeartBeat");
ctx.channel().writeAndFlush(heartBeat.build());]]></code>
                 </GroovyAction>
             </actions>
         </IdleStateHandler>
         <LengthFieldBasedFrameDecoder name="LengthFieldBasedFrameDecoder"/>
         <SelfProtobufDecoder>
             <ProtobufMessageFactory name="ProtobufMessageFactory" protos="xworker.protobuf.examples.ProtoExample"/>
         </SelfProtobufDecoder>
         <DemoMessageHandler name="DemoMessageHandler" descriptors="xworker.protobuf.netty.handlers.ProtobufNettyHandlers/@DemoMessageHandler"
              protos="xworker.protobuf.examples.ProtoExample"/>
         <LengthFieldPrepender name="LengthFieldPrepender"/>
         <SelfProtobufEncoder name="SelfProtobufEncoder"/>
     </Handlers>
</NettyServer>

3. Client example

    Combined with Google's protobuf client model sample code.

<?xml version='1.0' encoding='utf-8'?>

<NettyClient descriptors="xworker.netty.NettyClient,xworker.protobuf.client.NettyProtobufClient/@NettyClient"
      host="var:host" port="var:port">
     <variables><![CDATA[{
     host:"var:host",
     port:"var:port"
}]]></variables>
     <Handlers descriptors="xworker.netty.NettyServer/@Handlers">
         <IdleStateHandler event="true">
             <actions descriptors="xworker.netty.handlers.TimeoutHandler/@actions1">
                 <GroovyAction name="onWriterIdle" descriptors="xworker.groovy.GroovyAction">
                     <code><![CDATA[def proto = world.getThing("xworker.protobuf.examples.ProtoExample");
def messageFactory = proto.doAction("getMessageFactory", actionContext);

def heartBeat = messageFactory.newBuilder("HeartBeat");
ctx.channel().writeAndFlush(heartBeat.build());]]></code>
                 </GroovyAction>
             </actions>
         </IdleStateHandler>
         <LengthFieldBasedFrameDecoder name="LengthFieldBasedFrameDecoder"/>
         <SelfProtobufDecoder>
             <ProtobufMessageFactory name="ProtobufMessageFactory" protos="xworker.protobuf.examples.ProtoExample"/>
         </SelfProtobufDecoder>
         <ProtobufClientToolsHandler name="ProtobufClientToolsHandler" descriptors="xworker.protobuf.netty.handlers.ProtobufNettyHandlers/@ProtobufClientToolsHandler"/>
         <LengthFieldPrepender name="LengthFieldPrepender"/>
         <SelfProtobufEncoder name="SelfProtobufEncoder"/>
     </Handlers>
</NettyClient>

 

Copyright ©  2007-2019 XWorker.org  版权所有  沪ICP备08000575号