(一)上次测试vertx用的是普通的开发模式。测试也相当的不方便,现在改用maven搭建。
maven使用比较简单,利用Eclipse的插件填入相应的groupid等等就可以构建好一个成熟的vertx开发环境,而且测试方便可以再junit里面测试,因为vertx封装好了一个测试类TestVerticle,不过junit的before after这类就不可以使用了。
进入http://www.mvnrepository.com/搜索vertx
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-maven-archetype</artifactId>
<version>2.0.7-final</version>
</dependency>
输入相应groupid artifactid version 就可以自动构建了。
(二)关于TCP/IP看了本书《Java TCP IP Socket编程》。感想如下:
TCP IP Socket Application的关系
传输协议:书中讲了2种传输方式:1.文本型 2:二进制型,这两种都需要对应的编码解码。个人理解为json,和protobuf。
整个网络服务器的发展历程:
1.当然是单线程服务端。
2:多线程服务端。具体又分为每个请求一个线程和线程池。
3:因为请求可能很零碎频繁,在线程之间切换保存上下文会占用大量cpu时间,所以出现了NIO,又回到了单线程,原理是监控所有连接,排队,挨个处理需要处理的任务。原因在于:在socket进行connect,accept,read,write的时候都会阻塞。这时的cpu会空转。其中nodejs和vertx是采取这种方式(不确定是不是,因为他们都是利用回调函数,在设备就绪时候通知处理。而不是轮询。
4.其中nodejs的做服务器的话,只能用到1个核,对于多核来说还是挺浪费的。但是vertx 提供了instance X这个选项,可以同时启动好几个进程,充分利用多核cpu,vertx会自动选择一个instance进行处理。
NIO:书中的例子很详细,但是当时还是没怎么看懂,结合了http://www.iteye.com/magazines/132-Java-NIO里面的例子差不多至少原理上懂了。
主要组成由buffer,channel,select。buffer其实就是一个静态的数组。。需要具体分配大小。channel和buffer会互相写入读取数据。而select是选取就绪的设备出来。具体的javaeve讲的很清楚,不过没有书中讲的深入,包括后备数组啥的。。。
不过vertx是根据jdk1.7的NIO2编写的,具体有什么差别还没有研究。