- 博客(80)
- 资源 (23)
- 收藏
- 关注
原创 Netty4系列--实现简单的Http协议
利用netty4来实现http的服务器,代码如下:public class ApiServer { public static void main(String[] args) { int port = 8089; if (args != null && args.length > 0) { try {
2017-08-13 14:10:08
931
原创 netty实现webSocket协议
1、http协议现状 一直以来http协议一直都是请求/响应的模式,如果服务器有新的数据变化要推送给客户单,此时需要客户端发送一个请求由服务器进行响应。要想实现服务端立即推送到客户端,可以使用轮训的机制或Comet,但这里有一个共同的问题是:由于http协议的开销,导致他们不适用于低延迟。 http协议弊端如下: http为半双工模式,不
2017-06-13 16:38:40
879
原创 Netty使用google protobuf进行编解码
1、编解码技术 基于java提供的对象输入\输出流ObjectInputStream和ObjectOutputStream,可以直接把java对象作为存储的字节数组写入文件,也可以传输到网络上。基于Jdk的默认序列化机制可以避免操作底层数组,从而提升开发效率。 java序列化的目的主要有两个: 网络传输 对象持久化。 基于netty的nio网络开发,主要
2017-06-12 14:37:15
622
原创 netty分割符和定长解码器的应用
tcp以流的方式进行数据传输,上层的应用协议为了对消息进行区分,往往采用如下4种方式: 1、消息固定长度,累计读取到长度一定的报文段后,就读取下一个报文段。 2、将回车换行符做为消息结束符,例如ftp协议,这种方式在文本协议中应用比较广泛。 3、将特殊的分割符作为消息结束标志,回车换行就是一种特殊的结束分隔符; 4、通过在消息头中定义长度字段来标识消
2017-06-12 13:47:36
623
原创 Netty入门应用一
在本例子中使用的是netty5,以及后面的例子中也是。先去官网进下载5.0.0.Alphal,解压后要引用的jar包就是netty-5.0.0.Alphal.jar包。对于用netty进行编写TimeServer的nio程序如下:package zou;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.Ch
2017-06-11 22:53:28
364
原创 nio编
NIO,有人称为New IO这是相对于之前传统io的叫法。但是与之前传统的相比,New IO类库的目标是让java支持非阻塞IO,因此是指非阻塞IO。 NIO类库的简介 1、缓冲区buffer 在nio库中,所有的数据都是用缓冲去咧,在读取数据的时候,它是直接读到缓冲区中的;在写入数据的时候,写入到缓冲区中。任何时候访问NIO中的数据,都是通过缓冲区进行操作的。
2017-06-09 15:43:34
307
原创 tcp超时重传
tcp提供了运输的可靠性,对数据的传输进行了确认机制,如果当发送的数据丢失,或是ack的发送丢失,或是网络延迟等,这是会触发tcp进行超时重传。超时原理:在发送了一个数据报文后,会启动一个超时定时器,如果在超时定时器内还没有收到这个数据包的ack,那么就会进行重传,知道发送成功为止。递推公式概说超时的估算:超时的时间如果定义为长久固定值,那么可能造成网络的利用率不高;但
2017-06-08 17:54:31
722
原创 tcp成块数据流交互
滑动窗口滑动窗口协议是允许发送方发送多个未被确认的数据分组,每个分组不必等待确认后进行发送下一个分组,且接受方通过窗口协议可以对多个分组进行确认,可以加快数据的传输。 在滑动窗口协议中,ack的确认是可以累积的,可以一次确认多个分组。当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或减少了窗口的大小。我们使用3个术语来描述窗
2017-06-08 17:51:47
335
原创 tcp的关闭过程
tcp的关闭过程如下:会经历4次的握手:需要注意的是在一段发送了fin包后,收到了ack包,此时状态进入到TIME_WAIT状态,需要等2MSL才进入到closed状态,这为了防止ack包丢失进行超时重传。在一段进行了关闭后,只是在这一段不能发送收据,但它可以接受另外一端的发送数据的报文,这时就是半关闭了。其抓包信息如下:15:47:23.410025 IP
2017-06-08 17:47:32
1186
原创 tcp连接建立于终止
tcp的连接建立:在本机执行如下命令:sudo tcpdump -S port 8080 -vv -n -i lo0tcpdump: listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes00:35:50.265450 IP (tos 0x10, ttl 64, id 35702,
2017-06-08 17:42:23
423
原创 tcp传输控制协议
tcp服务:tcp是面向连接的,提供可靠的服务,对数据有校验机制。tcp的首部:其格式如下:如上tcp的报文是tcp的首部和tcp的数据。tcp的首部是有源端口和目的端口,这个值和ip首部的源ip和目的ip构成了tcp唯一确定的一个连接。序号是用来标示从tcp发端向tcp收端发送的数据字节。当建立一个新连接的时候,SYN标
2017-06-08 17:36:39
496
原创 linux io模型讲解
网络应用需要处理的无非两大类问题,网络io,数据计算。相对于后者,网络i/o的延迟,给应用带来的性能瓶颈大于后者。网络i/o模型大致有如下几种:同步模型 (synchronous i/o)阻塞i/o(blocking i/o)非阻塞io(non-blocking i/o)多路复用io (mulitplexing i/o)信号驱动方式i/o (signal-drivern
2017-06-08 16:42:58
335
原创 jstack日志深入理解
在分析线上问题时常使用到jstack 命令将当时Java应用程序的线程堆栈dump出来。面对jstack 日志,我们如何查看?首先要清楚线程的状态线程的状态有:new、runnable、running、waiting、timed_waiting、blocked、dead线程状态变迁图:各状态说明:New: 当线程对象创建时存在的状态,此时线程不可能执行;
2016-08-06 17:11:36
43257
原创 jvm基础学习
1、jvm虚拟机内存模型程序计数器:是线程的私有空间,每个线程都有一个独立的程序计数器,用于记录下一指令。java虚拟机栈:和线程创建的时候一起创建的,也是线程的私有空间,它保存了线程的局部变量、执行结果、调用和返回的情况。在虚拟机栈中会返回栈溢出的错误,如果一个线程的栈太深会返回此错误。如下一个例子:private int count = 0;pu
2016-08-06 17:09:52
535
转载 java虚拟机加载机制
Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程。在加载阶段,java虚拟机需要完成以下3件事:a.通过一个类的全限定名来获取定义此类的二进制字节流。b.将定义类的二进制字节流所代表的静态存储结构转换为方法区的运行时数据结构。c.在java堆中生成一个代表该
2014-06-05 14:47:57
709
转载 关于SimpleDateFormat安全的时间格式化线程安全问题
想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。下面我们通过一
2014-02-18 16:19:40
76489
10
原创 利用token来进行防止重复提交
对于一些页面,为了防止进行刷新或重复提交,可以通过token令牌来解决,其思路如下: 在生成表单页面事,对应生成一个令牌,然后将令牌存放在表单的隐藏域,也可存放在请求头的cookie中(服务端可以存放在session中或是cookie中)。当提交时判断令牌是否相等,如果相等则进行流程处理,最后在服务端删除对应的令牌,下次提交则发现不相等,则是对应的重复提交进行其他流程的处
2014-01-11 15:59:33
2268
原创 nohup命令的应用
有时候我们希望程序以后台方式进行运行,比如我们写好了一个jar包,设置了每小时运行一次。此时要在linux上以后台程序运行,那么可以利用nohup命令: nohup -java **.jar &,此时jar包的程序就会以后台进程方式进行运行,需要注意的是不能直接关闭当前窗口,需要执行exit命令,这样才能保证我们的后台jar程序会一直运行。
2013-11-27 19:44:26
526
原创 memcache的一致性hash算法
此文是在网上看到别人写memcache一致性hashi算法后进行编写的,感觉写的很好,所以就再录过来: 现在一般的算法就是一个hash值算法,对服务器个数进行取余来进行hash值的计算,假如你有n个cache,那么对于object的映射,你会通过hash(object)%n来进行映射对应的服务器上,但是当服务器当掉,那么你原来的存储数据会失效,且hash算法会进行修改,同理增加一台
2013-11-08 13:12:51
1368
原创 memcache内存使用原理及监控分析
memcache的内存分配默认是采用了Slab Allocator的机制分配、管理内存。在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的。 但是,这种方式会导致内存碎片,加重操作系统内存管理器的负担,最坏的情况下, 会导致操作系统比memcached进程本身还慢。Slab Allocator就是为解决该问题而诞生的。 Slab Allo
2013-11-06 18:17:24
5946
转载 持续集成工具
持续集成的工具已经是铺天盖地,有商业化的软件,也有开源的软件。覆盖的CI功能也是多种多样。从功能角度分,就笔者的学习经验而言,最关键的是三类:版本控制工具、构建工具、CI(Continuous integration)服务器。而其中最核心的又是构建工具。其他开源的、与持续集成相关的工具也有很多,但大多数是辅助性的工具。笔者学习持续集成时所选择的工具为:SVN、Maven、Jenki
2013-09-26 19:32:34
1331
转载 持续集成概念入门
一)为什么需要持续集成“敏捷编程”(Agile Programming)的思想若干年前就已经提出,并在业界获得广泛支持。从团队日常开发的角度来看,Agile Programming就是:"Short Cycles that are test-driven and feedback-driven, yielding constant improvement."其中,l
2013-09-26 13:46:31
2424
转载 php +mysql +apache 整合过程
准备工作:文件版本及下载地址:apache_2.2.10-win32-x86-no_ssl.msi官网:http://httpd.apache.org/下载地址:http://apache.freelamp.com/httpd/binaries/win32/apache_2.2.10-win32-x86-no_ssl.msiphp-5.2.6-Win32.zip官网:http:
2013-09-22 14:05:01
647
原创 linux文件格式转换
在linux上执行一个python文件时,经常报文件找不到。这是是因为格式的问题,在windows上换行是\r\n,而在unix上是\n,因此需要将文件转换成unix格式,可以直接使用命令 dos2unix file
2013-09-13 16:57:43
958
转载 HTTP协议 (三) 压缩
HTTP内容编码和HTTP压缩的区别HTTP压缩,在HTTP协议中,其实是内容编码的一种。在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码。 从而达到压缩的目的。 也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容。所以我们说HTTP压缩,其实就是HTTP内容编码的一种。 所以大家不要把HTTP压缩和HTTP
2013-08-23 16:42:56
535
转载 http协议详解
HTTP协议详解当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等。 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了Web应用程序的内部工作. 本文将对HTTP协议进行详细的实例讲解,内容较多,希望大家耐心看。也希望对大家的开发工作或者测试工作有所帮助。使用Fiddler工具非常方便地捕获H
2013-08-22 14:32:44
494
转载 http协议缓存
缓存的概念缓存这个东西真的是无处不在, 有浏览器端的缓存, 有服务器端的缓存,有代理服务器的缓存, 有ASP.NET页面缓存,对象缓存。 数据库也有缓存, 等等。http中具有缓存功能的是浏览器缓存,以及缓存代理服务器。 http缓存的是指:当Web请求抵达缓存时, 如果本地有“已缓存的”副本,就可以从本地存储设备而不是从原始服务器中提取这个文档。缓存的好处
2013-08-22 12:28:22
586
转载 java annotation
JAVA从J2SE5开始提供名为annotation(注释,标注)的功能。Java的annotation,可以附加在package, class, method, field等上面,相当于给它们添加了额外的辅助信息。附加在package, class, method, field等上的Annotation,如果没有外部解析工具等对其加以解析和处理的情况,本身不会对Java的源代码或class等产生
2013-08-12 18:22:05
667
转载 单点登录原理
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞
2013-07-26 14:28:00
598
转载 linux的软连接
软链接(符号链接)软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。建立软链接,只要在ln后面加上选项 –s,下面举个例子[root@rekfan.com test]# ls -il总计 01491138 -rw-r–r– 1 root root
2013-07-22 11:20:48
766
转载 理解threadLocal
ThreadLocal是什么早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它
2013-07-08 17:51:39
485
转载 memcach高并发数据失效的问题解决方案
memcached一般用于在访问一些性能相对低下的数据接口时(如数据库),为了保证这些数据接口的稳定性,加上memcached以减少访问次数,保证这些数据接口的健壮性。一般memcached的数据都是定时失效的,当数据失效时一般会再次去访问取数据接口,然后将其更新至memcached中。这时就会有一个问题,当某个数据失效时,恰好同时有大量的客户端访问该数据,这时这些客户端都会发现该数据失效,然后都
2013-07-05 10:06:53
1747
转载 mysql explain详解
Mysql Explain 详解一.语法explain 例如: explain select * from t3 where id=3952602;二.explain输出解释+----+-------------+-------+-------+-------------------+---------+---------+-------+------+
2013-06-13 19:28:45
473
转载 浅谈MySQL索引背后的数据结构及算法
摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为四个部分
2013-06-06 17:38:44
676
转载 HashMap和ConcurrentHashMap浅析
hashmap本质数据加链表。根据key取得hash值,然后计算出数组下标,如果多个key对应到同一个下标,就用链表串起来,新插入的在前面。看3段重要代码摘要:a:[java] view plaincopypublic HashMap(int initialCapacity, float loadFactor) {
2013-06-05 18:15:41
703
转载 eclipse对java项目进行打jar包
如果自己的java project中需要引用额外的jar包作为资源文件,那么需要自己自定义配置文件MANIFEST.MF ,内容示例如下:Manifest-Version: 1.0Class-Path: lib/crimson.jar lib/jbcl.jar lib/junit.jar lib/log4j-1.2.13.jar lib/mysql-connector-java-3.1
2013-05-31 14:26:47
1058
font-chinese安装包
2013-04-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人