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号