在netty的public void messageReceived(ChannelHandlerContext ctx, MessageEvent e){}方法中,怎么接收服务器分多次发来的一笔完成的数据,由于数据量大,所以只能多次发送。在messageReceived中怎么把这条完整的消息拼接起来?

解决方案 »

  1.   

    这个没有直接的办法,只能先把每个数据分组写到磁盘缓存起来,等所有数据分组都传输完毕了,再将磁盘中的缓存数据拼接起来,组成完整的数据。
    这就要求发送的每个分组数据中,带有分组信息,比如分组ID,分组序号,分组总个数,分组数据量等。
    接收方根据这些信息,可以将分组信息还原成完整的数据。一般的接收过程,只是单纯的接收数据。要想接收分组数据,就需要更改接收程序的过程:
    1. 传输分组数据,持久化分组数据;
    2. 从分组数据中提取分组信息,记录分组信息;
    3. 写一个线程安全的方法,并调用该方法,
        该方法的功能是,判断当前传输完毕的分组数据,是否是最后一个分组数据;
    4. 根据步骤3的结果做处理,如果最后一个分组数据已经传完,
       那么,根据所有记录下来的分组信息,重新组装分组数据,还原成完整的数据。
      

  2.   

    不知道LZ所说的“数据量大”具体是多大。
    楼上的方法不错,只是不是很大的话就不需要用磁盘缓存了