通信&netty
琅琊山二当家
这个作者很懒,什么都没留下…
展开
-
netty日志LoggingHandler怎么用
经常会有人问,为什么我没有收到包。为什么半天才收到包。各种问题,却没粘任何代码和日志,让别人无法帮助他分析问题,自己也陷入迷茫。其实netty自带一个日志记录的Handler,叫LoggingHandler,这个Handler使用netty的日志框架打印日志,而netty默认的日志是java的日志框架java logger,而java的日志框架默认级别是INFO级别,所以需要我们在pipeli...转载 2016-07-29 16:55:06 · 23054 阅读 · 1 评论 -
netty 心跳与IdleStateHandler与断线重连
netty的心跳机制只是触发事件,但没有包心跳包,需要自己发心跳包 IdleStateHandler不是发心跳包,而是触发心跳机制,在你设定的时候内没有收到包,就触发读心跳,没有发包就触发写心跳,如果都没有,就触发all 参考http://blog.csdn.net/albertfly/article/details/52182...原创 2016-08-15 16:22:48 · 6566 阅读 · 0 评论 -
用spring的InitializingBean的afterPropertiesSet初始化
实例 @Componentpublic class NettyServer implements InitializingBean{ @Resource private ChannelInitializer<SocketChannel> childHandler; @Value("${netty.host}") private String host; @V...原创 2016-08-16 14:22:33 · 5761 阅读 · 0 评论 -
netty 连接 No buffer space available (maximum connections reached?): connect
active953java.lang.IllegalStateException: failed to create a child event loop at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:99) at io.ne...原创 2016-08-16 10:40:13 · 7555 阅读 · 0 评论 -
Netty pipeLine decode的顺序
/** * 初始化Bootstrap * @return */ public static final Bootstrap getBootstrap(){ EventLoopGroup group = new NioEventLoopGroup(); Bootstrap b = new Bootstrap(...原创 2016-08-01 16:25:05 · 4171 阅读 · 0 评论 -
16进制几个字符是一个字节
问16进制 6e69 占用几个字节 16进制中,两个字符是一个字节,一个字符的话,是一个字节。 例如:A是一个字节,AA是一个字节,AAA是两个字节,AAAA是两个字节。 不过,16进制能够出现的字符(不区分大小写)是:1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F 6e69 占用 两个字节 ch.pipeline().addLast...原创 2016-07-29 15:49:16 · 27273 阅读 · 0 评论 -
Spring导出可以运行的jar包
最近需要解决Maven项目导入可执行的jar包的问题,如果项目不包含Spring,那么使用mvn assembly:assembly即可,详情可以参考:http://www.cnblogs.com/liqiu/p/3816068.html可是如果包含Spring,那么这么方法就不可行,报错:Configuration problem: Unable to locate Spring转载 2016-08-17 17:55:14 · 2446 阅读 · 0 评论 -
Netty5 Protobuf通信 解决半包
本文整合网上资源 给出了完整版本 对于高负载、高并发的网络应用,自己开发nio服务端,难度比较大、稳定性不能保证。于是选择nio框架netty+protobuf。netty对于消息编码和解码、半包读写问题支持很好;protobuf支持多语言,编码后消息小利于存储和传输。版本:java7 netty5 protobuf-java-2.5.0maven 依赖原创 2016-07-28 17:37:45 · 2322 阅读 · 0 评论 -
netty中使用IdleStateHandler来发起心跳
ps:这个写在client 端即可,不需要加在server端网络连接中,处理Idle事件是很常见的,一般情况下,客户端与服务端在指定时间内没有任何读写请求,就会认为连接是idle的。此时,客户端需要向服务端发送ping消息,来维持服务端与客户端的链接。那么怎么判断客户端在指定时间里没有任何读写请求呢?netty中为我们提供一个特别好用的IdleStateHa转载 2016-08-11 14:27:14 · 4084 阅读 · 0 评论 -
netty短链接的几篇文章
netty4发送HttpRequest及HttpReponse太大的问题(半包) netty是对socket的封装,底下走的TCP还是老一套,太大的HTTP包发送的时候是要被切分成好几段的,发送之后接收就变得很麻烦。网上有人提出多种解决方式,我自己试了试,结果如下:1.对于HttpRequest,有人提出在头部协商消息体长度。不要轻易相信呐,骚年们,这玩意儿就是...转载 2016-06-23 23:16:07 · 10618 阅读 · 0 评论 -
HTTP 报文介绍
ps :本文仅参考对于较大的文件我们可以直接用FTP协议传文件,较小的文件则可以向B / S 一样用HTTP上传。首先,由于要传文件,我们需要用 POST 来发送数据。GET 有长度限制,而且数据跟在URL后面。既然要发送POST请求,我们先来看看POST 请求的报文格式。HTTP 报文介绍先写一个简单的Html 页面发送一个表单转载 2017-03-25 20:35:55 · 483 阅读 · 0 评论 -
Netty 源码分析之 三 我就是大名鼎鼎的 EventLoop(一)
https://segmentfault.com/a/1190000007403873源码之下无秘密 ── 做最好的 Netty 源码分析教程Netty 源码分析之 番外篇 Java NIO 的前生今世Java NIO 的前生今世 之一 简介Java NIO 的前生今世 之二 NIO Channel 小结Java NIO 的前生今世 之三 NIO转载 2017-08-13 14:02:24 · 474 阅读 · 0 评论 -
网络通信分享(一):数字签名,数字证书,https通信,数据加密
加密算法:一:对称加密算法在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的。也就是说,加密和解密都是使用的同一个密钥。因此对称加密算法要保证安全性的话,密钥要做好保密,只能让使用的人知道,不能对外公开。这个和上面的公钥密码体制有所不同,公钥密码体制中加密是用公钥,解密使用私钥,而对称加密算法中,加密和解密都是使用同一个密钥,不区分公钥和私钥。密钥,一般就是一个字符串转载 2016-04-27 12:40:50 · 2101 阅读 · 0 评论 -
服务器的上行和下行带宽
转载: https://segmentfault.com/q/1010000009242784对于服务器而言,上行带宽是指每秒钟服务器传送给客户端的最大数据量,下行则相反。带宽和流量是完全两回事,用水管做比喻的话,带宽指的是每秒钟能流多少水,流量是指总共流了多少水。所以下载图片消耗的是上行流量,上传消耗的是下行。通常买的服务器,比如阿里云,一般买的带宽指的是上行带宽,下行通常是不限的。而且流量的计...转载 2018-02-28 16:48:51 · 16302 阅读 · 0 评论 -
spring项目中 http的超时管理(待完善)
转载 :https://segmentfault.com/q/1010000013437221?utm_source=tag-newest每一层都有超时客户端有tcp连接超时Linux有tcp连接超时nginx有http的等待请求、空闲连接超时;有反代的建连、发送请求、等待响应等超时tomcat应该也有执行超时等等你可控的是2-4,建议根据业务情况来设定如果某些请求的执行非常耗时间,则应该在相关层...转载 2018-03-16 17:39:38 · 2228 阅读 · 0 评论 -
基于netty的高性能RPC服务器技术简介
转载: https://www.2cto.com/kf/201702/597705.html基于netty的高性能RPC服务器技术简介:RPC 远程过程调用协议,是一种通过网络,向远程计算机程序上请求服务,而不必了解底层网络技术的协议。简单点说就是客户端在不必知道调用细节的前提下,调用远程计算机上运行的某个对象,使用起来就像调用本地的对象一样。目前典型的RPC框架有Facebook开源的Thrif...转载 2018-07-09 09:24:05 · 1789 阅读 · 0 评论 -
netty5 LengthFieldBasedFrameDecoder实例(解决半包)
1,使用LengthFieldPrepender编码,LengthFieldBasedFrameDecoder解码的netty传输可以解决半包粘包2 代码部分tcpserverpackage com.bimatrix.revit.nettyTest;import io.netty.bootstrap.ServerBootstrap;import io.netty.chan原创 2016-07-28 14:08:32 · 5177 阅读 · 4 评论 -
netty 粘包问题处理
一般TCP粘包/拆包解决办法定长消息,例如每个报文长度固定,不够补空格使用回车换行符分割,在包尾加上分割符,例如Ftp协议消息分割,头为长度(消息总长度或消息体长度),通常头用一个int32表示复杂的应用层协议netty的几种解决方案特殊分隔符解码器:DelimiterBasedFrameDecoder客户端发送消息String message = "netty转载 2016-07-27 18:13:13 · 1584 阅读 · 0 评论 -
SSE:服务器发送事件,使用长链接进行通讯
概述传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个“通知”,这要比浏览器按时向服务器查询(polling)更有效率。服务器发送事件(Server-Sent Events,简称SSE)就是为了解决这个问题,而提出的一种新API,部署在EventSource对象上。目前,除了IE,其他主转载 2016-06-30 15:24:48 · 2196 阅读 · 0 评论 -
使用Netty进行文件传输
在写出了Netty Hello World 和 netty对象传输之后,又觉得不够,看了官网的例子,所以有了现在的这个文件传输。顺便说下,netty官网的例子真的好,如果要学习netty,还是看官网例子的好。不过我英文不太好,刚开始走了绕了好大一圈,但是现在熟悉了之后,回过头来看,还是官网的牛X。在这里再说下netty的零拷贝,这个零拷贝是netty在3.2版本中新加入的功能。其主转载 2016-05-26 18:40:47 · 2591 阅读 · 1 评论 -
netty快速入门3个实例
是一个netty快速入门的例子,也是我的学习笔记,比较简单,翻译于官方的文档整理后把所有代码注释放在每一行代码中间,简单明了地介绍一些基础的用法。 首页这是基于netty5的例子,如果需要使用请依赖netty5的包。maven引用方式1 <dependency> 2 <groupId>io.netty</groupId> ...转载 2016-05-28 19:24:31 · 12027 阅读 · 2 评论 -
Tomcat 通过listener 启动netty 服务
web.xml 配置<listener> <listener-class>com.bimatrix.revit.netty.NettyListener</listener-class> </listener> 类NettyListener public class NettyListener ...原创 2016-05-28 19:56:35 · 11962 阅读 · 6 评论 -
Netty5.x中新增和值得注意的点
最近事情多,OneCoder折腾了好几天,总算翻译完成了。翻译自官方文档:http://netty.io/wiki/new-and-noteworthy-in-5.x.html 该文档会列出在Netty新版本中值得注意变化和新特性列表。帮助你的应用更好的适应新的版本。 不像Netty3.x和4.x之间的变化,5.x没有那么大的变化,不过也取得了其简化设计中的转载 2016-05-28 23:25:41 · 3566 阅读 · 0 评论 -
Netty5入门学习笔记004-使用Netty传输POJO对象
传输POJO对象,重点在于对象的序列化,序列化后的对象可以通过TCP流进行网络传输,结合Netty提供的对象编解码器,可以做到远程传输对象。下面我们来看一个例子:模拟订票首先Java序列化的POJO对象需要实现java.io.Serializable接口。说明:还有很多种序列化的方式要比JDK自带的序列化要好 体积小利于保存和传输 例如google的protobuf和jbo转载 2016-05-28 23:56:10 · 2341 阅读 · 0 评论 -
基于Netty与RabbitMQ的消息服务
Netty作为一个高性能的异步网络开发框架,可以作为各种服务的开发框架。前段时间的一个项目涉及到硬件设备实时数据的采集,采用Netty作为采集服务的实现框架,同时使用RabbitMQ作为采集服务和各个其他模块的通信消息队列,整个服务框架图如下:将业务代码和实际协议解析部分的代码抽离,得到以上一个简单的设计图,代码开源在GitHub上,简单介绍下NettyMQServer采集转载 2016-05-29 00:12:09 · 4447 阅读 · 3 评论 -
UDP连接和TCP连接的异同
简单的说TCP与UDP的区别是有无连接状态。TCP是有连接状态的,而UDP没有,所以TCP是一种比较安全的通讯协议,而UDP则比较方便TCP 127.0.0.1:1026 0.0.0.0:0 LISTENING TCP 是传输协议 TCP是主动连接 网页什么的用TCP(貌似)UDP也是传输协议 UDP迂回连接 QQ就用UDP (貌似)127.0.0.1 是本地回环地转载 2016-05-05 17:05:55 · 5061 阅读 · 0 评论 -
Netty4 自定义Decoder,Encoder进行对象传递(粘包处理)
首先我们必须知道Tcp粘包和拆包的,TCP是个“流”协议,所谓流,就是没有界限的一串数据,TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际数据进行包的划分,一个完整的包可能会被拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包进行发送。这里引用Netty官网的User guide里面的图进行说明: Dealing with a Stream-based...转载 2016-05-29 21:23:30 · 11597 阅读 · 2 评论 -
Netty系列之Netty高性能之道
. 背景1.1. 惊人的性能数据最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用。相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。事实上,我对这个数据并不感到惊讶,根据我5年多的NIO编程经验,通过选择合适的NIO框架,加上高性转载 2016-05-29 22:59:04 · 1954 阅读 · 0 评论 -
ByteBuf
用NIO时需要使用缓冲区,常用的缓冲区就是JDK NIO类库提供的java.nio.Buffer,而主要使用的是ByteBuffer。但是ByteBuffer也有局限性: 1.ByteBuffer长度固定,一旦分配完成,它的容量就不能动态扩展和收缩,当需要编码的POJO对象大于ByteBuffer的容量时,会发送索引越界异常; 2.ByteBuffer只有一个标识位转载 2016-05-30 00:27:52 · 3509 阅读 · 0 评论 -
HttpURLConnection与HttpClient 区别及联系
ponseMessage():获取服务器的响应消息。String getResponseMethod():获取发送请求的方法。void setRequestMethod(String method):设置发送请求的方法。 在一般情况下,如果只是需要Web站点的某个简单页面提交请求并获取服务器响应,HttpURLConnection完全可以胜任。但在绝大部分情况下,Web站点的网转载 2016-06-02 18:43:16 · 1883 阅读 · 0 评论 -
通过HttpURLConnection模拟post表单提交
import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import org.junit.Test;import com.hrtx.util.StreamTool;public class EsmTest { /** * 通过HttpURLConnectio转载 2016-06-02 19:04:56 · 1869 阅读 · 0 评论 -
mina高并发短连接导致java.io.IOException: Too many open files解决方案
这几天在解决一个用mina开发的高并发通信过程中产生的一个bug。 模拟场景为: 通过定时触发启动线程模拟高并发短连接测试,测试的服务端有2个,一个是服务有起,一个没起,客户端和服务端均在同一服务器上。执行一段时间后linux主机上通过lsof命令查看,发现有递增的文件句柄,pipe和eventpoll。 抛出的异常如下: Java代码转载 2016-06-23 22:57:48 · 5452 阅读 · 0 评论 -
Netty 介绍
本指南对Netty 进行了介绍并指出其意义所在。1. 问题现在,我们使用适合一般用途的应用或组件来和彼此通信。例如,我们常常使用一个HTTP客户端从远程服务器获取信息或者通过web services进行远程方法的调用。然而,一个适合普通目的的协议或其实现并不具备其规模上的扩展性。例如,我们无法使用一个普通的HTTP服务器进行大型文件,电邮信息的交互,或者处理金融信息转载 2016-06-23 23:17:08 · 701 阅读 · 0 评论 -
JAVA socket通信
1:简介Java语言从一开始就是为了让人们使用互联网而设计的,它为实现程序的相互通信提供了许多有用的抽象应用程序接口(API, Application Programming Interface),这类应用程序接口被称为套接字(sockets)。信息(information)是指由程序创建和解释的字节序列。在计算机网络环境中,这些字节序列被称为分组报文(packets)。一组报转载 2016-05-23 16:42:51 · 1778 阅读 · 0 评论 -
Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
转载请注明出处:http://blog.csdn.net/anxpp/article/details/51512200,谢谢! 本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解。 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端。 代码的所有说明,都直接作为注释,嵌入到代码中,看代码时就转载 2016-06-04 19:07:33 · 812 阅读 · 0 评论 -
Netty维持长连接 消息推送及心跳机制
ps: 以下是单机的处理方案 多机器只要把连接map内容维护到缓存里面 集中管理 就可以了。。Netty 准备说明:引入java-websocket,netty-all-5.0等的jar包。其中内部心跳机制使用userEventTriggered事件方式实现,客户端的心跳实现客户端的断点重连工作,服务端的心跳实现服务端清除多余链接的功能 。以下为一些实现的代码:1...转载 2016-04-28 10:25:48 · 10612 阅读 · 2 评论