zoukankan      html  css  js  c++  java
  • Android 基于Netty的消息推送方案之对象的传递(四)

    在上一篇文章中《Android 基于Netty的消息推送方案之字符串的接收和发送(三)》我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuffer传递的,那么自然,Object也需要转换成ChannelBuffer来传递。好在Netty本身已经给我们写好了这样的转换工具。ObjectEncoder和ObjectDecoder,下面我们介绍一个案例。

    1. 我们构造一个用来传输的对象(JavaBean)

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. @SuppressWarnings("serial")  
    2. public class Command implements Serializable {  
    3.    
    4.    
    5.     private String actionName;  
    6.    
    7.     public String getActionName() {  
    8.         return actionName;  
    9.     }  
    10.    
    11.     public void setActionName(String actionName) {  
    12.         this.actionName = actionName;  
    13.     }  
    14. }  

    2.我们先看一下Client的代码

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. public class ObjectClient {  
    2.     public static void main(String args[]) {  
    3.         ClientBootstrap bootstrap = new ClientBootstrap(new NioClientSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));  
    4.         bootstrap.setPipelineFactory(new ChannelPipelineFactory() {  
    5.             @Override  
    6.             public ChannelPipeline getPipeline() throws Exception {  
    7.                 return Channels.pipeline(new ObjectEncoder(), new ObjectClientHandler());  
    8.             }  
    9.         });  
    10.   
    11.         bootstrap.connect(new InetSocketAddress("127.0.0.1", 8000));  
    12.     }  
    13. }  
    14.   
    15. class ObjectClientHandler extends SimpleChannelHandler {  
    16.     /** 
    17.      * 当绑定到服务端的时候触发,给服务端发消息。 
    18.      */  
    19.     @Override  
    20.     public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) {  
    21.         // 向服务端发送Object信息  
    22.         sendObject(e.getChannel());  
    23.     }  
    24.     /** 
    25.      * 发送Object 
    26.      * @param channel 
    27.      */  
    28.     private void sendObject(Channel channel) {  
    29.         Command command = new Command();  
    30.         command.setActionName("Hello action.");  
    31.         channel.write(command);  
    32.     }  
    33. }  

    3.再看一下服务端的代码

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. public class ObjectServer {  
    2.     public static void main(String args[]) {  
    3.         // Server服务启动器  
    4.         ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));  
    5.         // 设置一个处理客户端消息和各种消息事件的类(Handler)  
    6.         bootstrap.setPipelineFactory(new ChannelPipelineFactory() {  
    7.             @Override  
    8.             public ChannelPipeline getPipeline() throws Exception {  
    9.                 //先编码 --> 后处理自己的业务  
    10.                 return Channels.pipeline(new ObjectDecoder(ClassResolvers.cacheDisabled(this.getClass().getClassLoader())), new ObjectServerHandler());  
    11.             }  
    12.         });  
    13.         bootstrap.bind(new InetSocketAddress(8000));  
    14.     }  
    15. }  
    16.   
    17. class ObjectServerHandler extends SimpleChannelHandler {  
    18.     /** 
    19.      * 当接受到消息的时候触发 
    20.      */  
    21.     @Override  
    22.     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {  
    23.         Command command = (Command) e.getMessage();  
    24.         // 打印看看是不是我们刚才传过来的那个  
    25.         System.out.println(command.getActionName());  
    26.     }  
    27. }  

    先运行服务端,再运行客户端,然后在服务端的控制台中打印如下字符串

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. Hello action.  
  • 相关阅读:
    show processlist 输出ID 和 information_schema.PROCESSLIST 的id,information_schema.innodb_trx的TRX_MYSQL_T
    用 Flask 来写个轻博客 (15) — M(V)C_实现博文页面评论表单
    第十二章 对象(下)
    十大最值得关注的国内大数据分析厂商
    第十二章 对象(上)
    mysql 区间锁 对于没有索引 非唯一索引 唯一索引 各种情况
    insert into select 堵塞update
    监控持有sql和被堵塞的sql
    人生应该有间隔年——北漂18年(75)
    ERROR: transport error 202: connect failed: Connection timed out
  • 原文地址:https://www.cnblogs.com/dongweiq/p/4019441.html
Copyright © 2011-2022 走看看