通信(Netty、Mina2)【通信粘包的处理】、【数据协议】、【网络系统的安全性】

ElasticSearch集群搭建 docker安装es集群 阅读详情
Netty、Mina2是非常优秀的javaNIO+ThreadPool线程池通信框架
http://www.cnblogs.com/51cto/archive/2010/09/06/1819361.html
提到通信就得面临两个问题,一是通信协议的选择,二是数据协议的定义。通信协议耳熟能详的就有好几种,TCP,UDP,HTTP,FTP等等。数据协议是一种数据交换的格式,像jason,xml,amf3,google protocol都可以用作数据协议,你也可以自己根据通信的效率,安全等因素来定义自己的数据协议。

  通信系统的开发是一项很复杂的工作,不要以为往发服务端发一个Hello World!就认为完全掌握了通信系统的开发。概括来说要开发一个健壮的通信系统,必须从这几个方面来着手。

  一,通信粘包的处理

  这里包的概念是逻辑上的数据包,也就是我们发送的一个完整业务消息包,粘包情况有两种,一种是粘在一起的包都是完整的数据包,另一种情况是粘在一起的包有不完整的包。不是所有的粘包现象都需要处理,若传输的数据为不带结构的连续流数据(如文件传输),则不必把粘连的包分开(简称分包)。但在实际工程应用中,传输的数据一般为带结构的数据,这时就需要做分包处理。

  为了避免粘包现象,可采取以下几种措施。一是对于发送方引起的粘包现象,用户可通过编程设置来避免,TCP提供了强制数据立即传送的操作指令push,TCP软件收到该操作指令后,就立即将本段数据发送出去,而不必等待发送缓冲区满;二是对于接收方引起的粘包,则可通过优化程序设计、精简接收进程工作量、提高接收进程优先级等措施,使其及时接收数据,从而尽量避免出现粘包现象;三是由接收方控制,将一包数据按结构字段,人为控制分多次接收,然后合并,通过这种手段来避免粘包。

  以上提到的三种措施,都有其不足之处。总的来说降低了通信系统的吞吐量。我们可以自己设计一个分包算法来处理粘包的问题,该算法的实现是这样的:

   1. 当有数据到达时,将数据压入程序缓冲区。
   2. 循环处理缓冲区,如果缓冲区长度大于包头长度,则取出长度信息n,否则跳出循环,如果缓冲区的长度大于n,则从缓冲区取出一个完整包进行处理,否则跳出循环。

如果你是Java的爱好都可以参考一下Mina和netty2的实现,像Mina和Netty2都提供了粘包处理类可供使用,像Mina的CumulativeProtocolDecoder类,Netty2的LengthFieldBasedFrameDecoder。

  二,数据协议选择

  现在已经有很多数据协议可供我们选择,像jason,xml,amf3,google protocol等等,这些协议相应的语言都有API来对自身数据做协议处理,我们选择协标准无非就是效率和大小,这里每个人可以根据实际的应用环境选择适合的数据协议。

  三,网络系统的安全性

  网络安全是一个永远的话题,对通信数据加密一般常RSA对byte流加密,FLOOD验证,IP黑名单验证都是必须考虑到的。

  以上是做网络开发必须了解的一些基础知识,在这里我们使用一个具体的实例来加深一下理解,Java与Flex使用AMF3数据协议通信。做过网络开发的一般都会知道套接字(SOCKET),很多语言都会通SOCKET来提供对网络操作的API,Java的提供的NIO SOCKET是一个高效的异步通信API,当然可以在这个基础上来开发我们的网络应用,但这种Native API需要我们花很多精力来处理网络通信的细节,消弱了我们对业务的关心。为我们开发带来很多不便性,幸好Java有很多现成的NIO SOCKET框架可供使用,像Mina,Netty2,xSocket等等,这些框架处理了很多底层的通信问题,提供了一些易用的API以供使用。在这个实例中我们使用Netty2来做通信框架。


转自 http://www.cnblogs.com/51cto/archive/2010/09/06/1819361.html


k8s中pod使用详解 k8s中Pod使用 阅读详情

相关推荐

MINA2Netty4比较分析

从源码和网上资料,总结了Mina2Netty4的区别,主要是分析线程模型的Buffer,还提到了Netty4中引入的Google的优秀的序列化工具ProtoBuf

Java通信(NettyMina2)通信处理】、【数据协议】、【网络系统安全性】...

NettyMina2是非常优秀的javaNIO+ThreadPool线程池通信框架 http://www.cnblogs.com/51cto/archive/2010/09/06/1819361.html 提到通信就得面临两个问题,一是通信协议的选择,二是数据协议的定义。通信协议耳熟能详的就有好几种,TCP,UDP,HTTP,FTP等等。数据协议是一种数据交换的格式,像jason,xml,a...

huahua280862132的专栏 205

Mina处理(完整实例,有客户端,服务端)

Mina处理。(完整实例,客户端,服务端)

Netty-Mina深入学习与对比(二)

上文netty-mina深入学习与对比(一)讲了对netty-mina的线程模型以及任务调度粒度的理解,这篇则主要是讲nio编程中的注意事项,netty-mina的对这些注意事项的实现方式的差异,以及业务层会如何处理这些注意事项。 1. 数据是如何write出去的 java nio如果是non-blocking的话,在每次write(bytes[N])的时候,并不会将N字节全部write出去,

qq1091606981的专栏 1091

ios java netty_NIO框架入门():iOS与MINA2Netty4的跨平台UDP双向通信实战

前言本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo。服务端将分别用MINA2Netty4进行实现,而通信时服务端你只需选其一就行了。同时用MINA2Netty4分别实现服务端的目的,是因为很多人都在纠结到底是用MINA还是Netty来实现高并发的Java网络通信服务端,在此干脆两个都实现了,就看你怎么选择了,够吊吧。NIO框架的流行...

weixin_29015051的博客 431

Nettymina

Mina2.0 框架内置了完整的网络层功能,从底层的 IO 处理到上层应用的数据处理,都提供了丰富的 API 和灵活的配置选项,使得开发者能够更加专注于业务逻辑的实现,而不必深入底层复杂的网络编程细节。与传统网络编程相比,MINA 通过封装底层网络操作,提供了更简洁的 API 和更高级别的抽象,大大降低了开发者的编程难度,缩短了开发周期。它的设计目标是简化 NIO 编程,减少开发人员处理低层细节的负担,提高程序的开发效率。此外,Netty 提供了丰富的 API,使得网络编程不再需要关心底层复杂的。

weixin_51883798的博客 749

为什么Netty这么火?与Mina相比有什么优势?

image Netty是什么?为什么这么火? Netty是目前最流行的由JBOSS提供的一个Java开源框架NIO框架Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。 相比JDK原生NIO,Netty提供了相对十分简单易用的API,非...

weixin_34378922的博客 2100

通信(NettyMina2)通信处理】、【数据协议】、【网络系统安全性】...

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33722405的博客 92

Java与Flex通信

  提到通信就得面临两个问题,一是通信协议的选择,二是数据协议的定义。通信协议耳熟能详的就有好几种,TCP,UDP,HTTP,FTP等等。数据协议是一种数据交换的格式,像jason,xml,amf3,google protocol都可以用作数据协议,你也可以自己根据通信的效率,安全等因素来定义自己的数据协议。   通信系统的开发是一项很复杂的工作,不要以为往发服务端发一个Hello World!...

weixin_30328063的博客 113

JAVA 培训() NIO框架对比

MinaNetty 1. minanetty的线程模型 minanetty都是Trustin Lee的作品,所以在很多方面都十分相似,他们线程模型也是基本一致,采用了Reactors in threads模型,即Main Reactor + Sub Reactors的模式。由main reactor处理连接相关的任务:accept、connect等,当连接处理完毕并建立一个socke

hannuotayouxi的博客 670

Java NIO框架MinaNetty、Grizzly介绍

MinaMina(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 Mina 版本2.04支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序,Mina 所支持的功能也在进一步的扩展中。目前,

alaclp的专栏 1208

TCP 数据连分析及解决文档

TCP协议会存在数据连,本文有详细介绍哦

netty vs mina nettymina的区别

Netty和mian比较报告 一、数据测试报告 简述:1、启动服务器,等到客户端接入 2、客户端发送链接请求。当已经链接,记录当前时间并向服务端发送约50m数据,每次1kb. 3、当服务端接收到链接,第一次接收到数据后,记录当前时间 4、服务端将接收到的数据再返回给客户端。当服务端接收数据超过50m,则停止接收,并记录当前时间...

weixin_33827965的博客 898

Netty-Mina深入学习与对比

Netty-Mina深入学习与对比(一) 感谢支付宝同事[易鸿伟]在本站发布此文。 这博文的系列主要是为了更好的了解一个完整的nio框架的编程细节以及演进过程,我选了同父(Trustin Lee)的两个框架nettymina做对比。版本涉及了netty3.x、netty4.x、mina1.x、mina2.x、mina3.x。这里并没有写netty5.x的细节,看了netty5的修改文档,

xcwll314的专栏 2810

MINA2中的拆处理及一些方法

<br />1.position <br /><br /> 例: <br /> position() <br /> 第一次使用返回值为当前位置:0 <br /><br /><br /> position(8) 返回第8个字节以后的数据括第8个)可以和 limit 联合使用 <br /> 如: <br /> buffer.position(3); <br /> buffer.limit(7); <br /> ByteBuffer slice = buffer

wkyb608的专栏 1472

java mina_mina 、多和少的解决方法

使用过 mina 的同学应该都遇到到过,在解码时少、多的问题,查阅了很多资料还是迷迷糊糊的,经过不懈努力,终于解决了。原来解决方法是那样的简单。废话少说,请看例子。另外建了一个交流群:19702042,大家可以在线交流问题:我发送的是 xml 字符串数据,在发送数据后,接收方在解码的时候可能接到1条,也可能是多条,还可能是半条或一条半,解决方法就是使用 CumulativeProtocolDe...

weixin_30830161的博客 415

Mina自动分的解决方法

最近用JAVA做服务端,使用Mina框架对接终端设备,通过TCP通讯,在数据量较大的情况下,遇到Mina接收数据不完整的情况,经过研究,找到解决方法,记录如下: Mina版本:2.1.2 1.实现ProtocolCodecFactory类,用来拦截数据。 import org.apache.mina.core.session.IoSession; import org.apache.m...

calonmo的专栏 1998

(经典)tcp分析

这两天看csdn有一些关于socketsocket缓冲区设置的问题,发现自己不是很清楚,所以查资料了解记录一下:  一 .两个简单概念长连接与短连接: 1.长连接     Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。

zhangxinrun的专栏 8万+

嵌入式学习————————TCP并发服务器(1)

会保留发生事件的fd,把没有事件的fd从集合中清除。监听文件描述符集合。当集合中至少一个文件描述符产生事件,:监听文件描述符集合内是否产生事件。:监听事件表中的事件是否发生。:操作epoll内核事件表。:创建内核监听事件表。

koi77u的博客 213

JPS算法的python实现及其可视化

在文件目录启动命令行窗口,输入python Main.py -v map.bmp即可运行

上一篇: JSONObject与JSONArray的使用
下一篇: SWT 启用另一个线程处理耗时事务
泯梦幽思
博客等级 码龄18年 55粉丝 21原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值