君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理
  1057 随笔 :: 381 文章 :: 141 评论 :: 169万 阅读

随笔分类 -  java socket(java nio)&Apache mina&netty

1 2 下一页

摘要:自制聊天软件测试 SWing+Netty 阅读全文
posted @ 2018-12-06 08:42 刺猬的温驯 阅读(401) 评论(0) 推荐(0) 编辑

摘要:通过网页解析,抽取网页正文内容 阅读全文
posted @ 2018-12-05 02:17 刺猬的温驯 阅读(194) 评论(0) 推荐(0) 编辑

该文被密码保护。
posted @ 2014-10-13 18:35 刺猬的温驯 阅读(3) 评论(0) 推荐(0) 编辑

摘要:【背景】最近和之前,折腾了这个:【教程】模拟登陆百度之Java代码版然后,对于Java的HttpClient,有了点了解。现在整理如下:Java本身没有Http相关的库Java本身,没有内置对应的Http相关的库函数(与此对应的是,关于http处理,其他语言,都有内置的库:Python有内置的urllib,urllib2等模块C#有System.Net,System.Web相关库)Java中用的最多的http的库就是:HttpClient而关于网络处理,http相关处理,则用的最多的就是:HttpClient而HttpClient,是Apache这个组织所发布的。其对应的,完整的名称其实是:A 阅读全文
posted @ 2013-10-20 17:07 刺猬的温驯 阅读(10757) 评论(1) 推荐(0) 编辑

摘要:apache mina是一个基于java nio的网络通信框架,为TCP UDP ARP等协议提供了一致的编程模型;其源码结构展示了优秀的设计案例,可以为我们的编程事业提供参考。依照惯例,首先搭建apache mina 2.0的开发环境,本人采用maven作为项目管理工具,需要添加的依赖pom.xm... 阅读全文
posted @ 2013-10-12 00:37 刺猬的温驯 阅读(606) 评论(0) 推荐(1) 编辑

摘要:本文可看成是对Doug Lea Scalable IO in Java一文的翻译。当前分布式计算 Web Services盛行天下,这些网络服务的底层都离不开对socket的操作。他们都有一个共同的结构:1. Read request2. Decode request3. Process service4. Encode reply5. Send reply经典的网络服务的设计如下图,在每个线程中完成对数据的处理:但这种模式在用户负载增加时,性能将下降非常的快。我们需要重新寻找一个新的方案,保持数据处理的流畅,很显然,事件触发机制是最好的解决办法,当有事件发生时,会触动handler,然后开始 阅读全文
posted @ 2013-10-02 18:47 刺猬的温驯 阅读(433) 评论(0) 推荐(0) 编辑

摘要:转载 http://blog.csdn.net/cutesource/article/details/6192163最后我们再看看NIO方面最著名的框架Mina,抛开Mina有关session和处理链条等方面的设计,单单挑出前端网络层处理来看,也采用的是与Jetty和Tomcat类似的模式,只不过它做了些简化,它没有隔开请求侦听和请求处理两个阶段,因此,宏观上看它只分为两个阶段。先看看它的类图:其中:SocketAcceptor起线程调用SocketAcceptor.Work负责新连接侦听,并交给SocketIoProcessor处理SocketIoProcessor起线程调用SocketIo 阅读全文
posted @ 2013-06-24 06:29 刺猬的温驯 阅读(309) 评论(0) 推荐(0) 编辑

摘要:本文转载自 http://blog.csdn.net/cutesource/article/details/6192145下面再来看看Tomcat是如何使用NIO来构架Connector这块的。先看看Tomcat Connector这块的类图:其中:NioEndpoint负责组装各部件Acceptor负责监听新连接,并把连接交给PollerPoller负责监听所管辖的channel队列,并把请求交给SocketProcessor处理SocketProcessor负责数据处理,并把请求传递给后端业务处理模块在整个服务端处理请求的过程可以分为三个阶段,时序图如下所示:阶段一:监听并建立连接这一阶段 阅读全文
posted @ 2013-06-24 06:28 刺猬的温驯 阅读(315) 评论(0) 推荐(0) 编辑

摘要:本文转载自http://blog.csdn.net/cutesource/article/details/6192016如何正确使用NIO来构架网络服务器一直是最近思考的一个问题,于是乎分析了一下Jetty、Tomcat和Mina有关NIO的源码,发现大伙都基于类似的方式,我感觉这应该算是NIO构架网络服务器的经典模式,并基于这种模式写了个小小网络服务器,压力测试了一下,效果还不错。废话不多说,先看看三者是如何使用NIO的。Jetty Connector的实现先看看有关类图:其中:SelectChannelConnector负责组装各组件SelectSet负责侦听客户端请求SelectChan 阅读全文
posted @ 2013-06-24 06:26 刺猬的温驯 阅读(307) 评论(0) 推荐(0) 编辑

摘要:Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻的等,这会影响我们程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的。Java NIO非堵塞技术实际是采取Reactor模式,或者说是Observer模式为我们监察I/O端口,如果有内容进来,会自动通知我们,这样,我们就不必开启多个线程死等,从外界看,实现了流畅的I/O读写,不堵塞了。Java NIO出现不只是一个技术 阅读全文
posted @ 2013-06-22 05:07 刺猬的温驯 阅读(328) 评论(0) 推荐(0) 编辑

摘要:五、迷惑不解:为什么要自己消耗资源?令人不解的是为什么我们的Java的New I/O要设计成这个样子?如果说老的I/O不能多路复用,如下图所示,要开N多的线程去挨个侦听每一个Channel (文件描述符),如果这样做很费资源,且效率不高的话。那为什么在新的I/O机制依然需要自己连接自己,而且,还是重复连接,消耗双倍的资源?通过WEB搜索引擎没有找到为什么。只看到N多的人在报BUG,但SUN却没有任何解释。下面一个图展示了,老的IO和新IO的在网络编程方面的差别。看起来NIO的确很好很强大。但似乎比起C/C++来说,Java的这种实现会有一些不必要的开销。六、它山之石:从Apache的Mina框 阅读全文
posted @ 2013-06-22 04:54 刺猬的温驯 阅读(316) 评论(0) 推荐(0) 编辑

摘要:一、前言自从J2SE 1.4版本以来,JDK发布了全新的I/O类库,简称NIO,其不但引入了全新的高效的I/O机制,同时,也引入了多路复用的异步模式。NIO的包中主要包含了这样几种抽象数据类型:Buffer:包含数据且用于读写的线形表结构。其中还提供了一个特殊类用于内存映射文件的I/O操作。Charset:它提供Unicode字符串影射到字节序列以及逆映射的操作。Channels:包含socket,file和pipe三种管道,都是全双工的通道。Selector:多个异步I/O操作集中到一个或多个线程中(可以被看成是Unix中select()函数的面向对象版本)。我的大学同学赵锟在使用NIO类库 阅读全文
posted @ 2013-06-22 04:38 刺猬的温驯 阅读(438) 评论(0) 推荐(0) 编辑

摘要:在初始化一个 类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方 式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如:Java代码classc=Class.forName(“Example”);factory=(ExampleInterface)c.newInstance();其中Example 阅读全文
posted @ 2013-02-11 16:17 刺猬的温驯 阅读(230) 评论(0) 推荐(0) 编辑

摘要:前言MINA是Trustin Lee最新制作的Java通讯框架。通讯框架的主要作用是封装底层IO操作,提供高级的操作API。比较出名的通讯框架有C++的ACE、Python的Twisted,而Java的通讯框架还有QuickServer、Netty2、Cindy、Grizzly等。2004年6月,Trustin Lee发布了一个通讯框架Netty2,是Java界第一个事件模型架构的通讯框架,Cindy也从中借鉴了不少思想。由于Netty2的架构不是很好,Trustin Lee在2004年底加入Apache Directory组之后,重写了整个框架,取名为MINA。MINA是一个基于Java N 阅读全文
posted @ 2013-02-05 17:53 刺猬的温驯 阅读(285) 评论(0) 推荐(0) 编辑

摘要:1.MINA框架简介MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架。通过使用MINA框架可以可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入到业务设计和开发当中。MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。MINA框架当前稳定版本是1.1.6,最新的2.0版本目前已经发布了M1版本。MINA框架的特点有 阅读全文
posted @ 2013-02-04 00:34 刺猬的温驯 阅读(267) 评论(0) 推荐(0) 编辑

摘要:转载http://huangrongyou.iteye.com/blog/1533129将已经有的MQ的Demo代码发送到博客上如何部署自己部署MQJML理论WSAD环境下JMS异步通信全攻略 (1) 学习其对JMS说明部分使用 Apache Geronimo 和 JMS 构建事件驱动的框架JMS 基本可靠性机制 和 事务机制配置参数:关于ActiveMQ的配置 好像还不错Activemq 安全机制以及稳定性研究 主要讲如何配置Active MQ教程ActiveMq官网ActiveMQ_in_Action_中文.pdf 中文版本的JSM教程Apache ActiveMQ教程ActiveMQ i 阅读全文
posted @ 2012-10-28 23:07 刺猬的温驯 阅读(7936) 评论(1) 推荐(1) 编辑

摘要:先看看多种java通信方式的特点1.阻塞式服务器收到了一个连接,当通信完毕后释放连接,接收新的连接2.阻塞式+线程池可利用java库类中现成的线程池,做起来比较简单为每个用户分配一个线程缺点:虽然可以通过线程池限制线程数防止服务器效率过低,但是线程调度毕竟要消耗资源3.非阻塞式用A,B方式A用1个线程当用一个线程时,采用轮询的方式。看连接,可读,可写3个事件有谁就绪了,就处理谁。例如:如果一个线程连接就绪了,但是可读没有就绪,此时是接受新的连接任务的。对比1(阻塞式)不用像阻塞式一样把一个连接的3个事件(连接,可读,可写就绪)处理完了,才能处理下一个连接对比2(阻塞式+线程池)少了线程调度的开 阅读全文
posted @ 2012-10-17 23:48 刺猬的温驯 阅读(348) 评论(0) 推荐(0) 编辑

摘要:转载http://souljava.blog.163.com/blog/static/255571212007111693218434/先看段打开网页的代码:URLurl=newURL("http://souljava.blog.163.com/");URLConnectionconnection=url.openConnection();connection.getInputStream();问题1:客户端浏览器怎么判断接受到的是什么数据类型?回答:java的附带浏览器JEditorPane会按以下方式,依次判断URLConnectiongetContentType()U 阅读全文
posted @ 2012-10-17 23:47 刺猬的温驯 阅读(1988) 评论(1) 推荐(0) 编辑

摘要:在上一篇文章中介绍了关于缓冲区的一些细节内容,现在终于可以进入NIO中最有意思的部分非阻塞I/O。通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据。同样,写入调用将会阻塞直至数据能够写入。传统的Server/Client模式会基于TPR(Thread per Request),服务器会为每个客户端请求建立一个线程,由该线程单独负责处理一个客户请求。这种模式带来的一个问题就是线程数量的剧增,大量的线程会增大服务器的开销。大多数的实现为了避免这个问题,都采用了线程池模型,并设置线程池线程的最大数量,这由带来了新的问题,如果线程池中有200个线程,而有200个用户都在进行大 阅读全文
posted @ 2012-10-15 22:59 刺猬的温驯 阅读(342) 评论(2) 推荐(0) 编辑

摘要:在上一篇文章中介绍了缓冲区内部对于状态变化的跟踪机制,而对于NIO中缓冲区来说,还有很多的内容值的学习,如缓冲区的分片与数据共享,只读缓冲区等。在本文中我们来看一下缓冲区一些更细节的内容。缓冲区的分配在前面的几个例子中,我们已经看过了,在创建一个缓冲区对象时,会调用静态方法allocate()来指定缓冲区的容量,其实调用 allocate()相当于创建了一个指定大小的数组,并把它包装为缓冲区对象。或者我们也可以直接将一个现有的数组,包装为缓冲区对象,如下示例代码所示:[java]view plaincopyprint?publicclassBufferWrap{publicvoidmyMeth 阅读全文
posted @ 2012-10-15 22:59 刺猬的温驯 阅读(531) 评论(0) 推荐(0) 编辑

1 2 下一页
点击右上角即可分享
微信分享提示