Netty can be used to build a network server or connect to the server as a network client, supporting multiple protocols.
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>
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号