![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络编程
猴哥_IT小菜鸟
三分天注定七分靠打拼 爱拼才会赢
展开
-
Linux Epoll vs Windows IOCP
1 Epoll vs. IOCPEpoll 和 IOCP 都是为高性能网络服务器而设计的高效 I/O 模型;都是基于事件驱动的。事件驱动有个著名的好莱坞原则(“不要打电话给我们,我们会打电话给你”)。 不同之处在于:1. Epoll 用于 Linux 系统;而 IOCP 则是用于 Windows ;(啊,好大的鸡蛋 … )2. Epoll 是当事件资源满足时发出可处理通知消息;而 IOCP转载 2017-02-21 17:04:29 · 618 阅读 · 0 评论 -
Socket心跳包机制
心跳包的发送,通常有两种技术:方法1:应用层自己实现的心跳包 由应用程序自己发送心跳包来检测连接是否正常,大致的方法是:服务器在一个 Timer事件中定时 向客户端发送一个短小精悍的数据包,然后启动一个低级别的线程,在该线程中不断检测客户端的回应, 如果在一定时间内没有收到客户端的回应,即认为客户端已经掉线;同样,如果客户端在一定时间内没 有收到服务器的心跳包,则认为连接不可用。方法2:TCP转载 2017-02-21 21:38:45 · 468 阅读 · 0 评论 -
HTTP长连接与短连接
HTTP持久连接(HTTP persistent connection,也称作HTTP keep-alive或HTTP connection reuse)是使用同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法。 以下是一张HTTP长连接与HTTP普通连接的区别: 1. HTTP协议与TCP/IP协议的关系HTTP的长转载 2017-02-21 21:39:17 · 167 阅读 · 0 评论 -
Jetty Continuation机制
Continuation机制Continuation机制是Jetty用于更好的支持异步Servlet的机制。 首先简要介绍一下技术应用的背景。异步请求是指当客户端发送一个请求到服务器的时候,客户端不必一直等待服务器的响应,例如Web 2.0中的Ajax(Asynchronous JavaScript and XML)技术、JDBC连接池等,当服务器端响应返回时,客户端利用一个 Javascrip转载 2017-02-21 21:39:42 · 189 阅读 · 0 评论 -
Servlet 3之异步处理特性
Servlet 3.0 新特性概述异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度。Servlet 3.0异步处理支持Se转载 2017-02-21 21:40:55 · 226 阅读 · 0 评论 -
Comet & Jetty Continuations
Comet是一种服务器端推的技术,所谓服务器端推也就是当有事件要通知给某个用户的时候,是由服务器端直接发送到用户的浏览器。服务器端Push目前一般有两种方式,HTTP Streaming和Long Polling。 Comet中文如果直译叫做彗星,其实是比较形象的一种说法。Comet在某些场景下也被叫做Http Streaming。Comet作为一种技术手段,其实是指在客户端和服务端建立转载 2017-02-21 21:41:26 · 214 阅读 · 0 评论 -
ZeroMQ:云计算时代最好的通讯库
还在学socket编程吗?还在研究为什么epoll比select更好吗?噢,不必了!在复杂的云计算环境中,我们面临的难题远比这个复杂得多。庞大的服务器集群作为计算云,对来来看或许只是一个简单的搜索框;而在云的内部,复杂的互联和海量的通讯,加之不稳定的网络环境,廉价服务器的低可用性——构建一个高可用性且具备伸缩能力的云计算的环境,不是那么容易的! 为什么说ZeroMQ是云计算时代最好的通讯库转载 2017-02-21 21:41:50 · 273 阅读 · 0 评论 -
Jetty Continuation基本原理及实现
背景在io密集型的web 应用,如何能更好地提升后台性能,jetty continuation是一个选择现在特别流行的说法就是事件驱动,看看Node.js以及Redis, jetty continuation也不例外一个例子[java] view plaincopypackage org.kaka.web; import java.io.IOException; import java.转载 2017-02-21 21:42:16 · 324 阅读 · 0 评论 -
Jetty Continuation源码分析
1.概述jetty的continuation是用于异步处理请求,简单的讲,请求模型不再是一请求一线程,而是在请求的过程中,可以挂起当前请求,用该容器线程处理别的请求。减小请求线程数,从而减少内存占用和上下文切换。还可以使得应用对于请求更可控,比如针对不同优先级请求分别排队等。servlet3中也有该异步请求的支持:http://docs.oracle.com/javaee/6/api/javax转载 2017-02-21 21:42:49 · 342 阅读 · 0 评论 -
Jetty Continuation源码学习
Jetty的NIO可以有效地减少请求的线程数,但是对于servlet而言,依然是每个servlet需要一个线程,Continuation的出现有效地解决了servlet中耗时操作占用请求线程的境况。Continuation用于处理异步请求,可以在请求处理的上下文交给应用线程去处理并挂起当前请求,这样减少了请求线程的数量,最后当应用线程处理完成后恢复该请求。比如使用该功能可以解决ajax长轮询服务端转载 2017-02-21 21:43:30 · 173 阅读 · 0 评论 -
Java远程通讯可选技术及原理
好文不该被埋没,之前转了一篇Java中各种通信协议性能数据比较的文章,被批评概念杂糅,术语使用不严谨。这里转一篇与其论域相似,讲的稍微系统点的文章,淘宝的毕玄大神几年前写的,文中我认为比较精彩的地方已用蓝色字体标识。因为此文是作者几年前的思考,某些术语较真起来有点问题,比如http其实是基于tcp之上的一层协议,把它与tcp、udp并立讨论有点奇怪。还有NIO的框架只介绍了mina,能介绍一下net转载 2017-02-21 21:38:18 · 235 阅读 · 0 评论 -
Apache Thrift - 可伸缩的跨语言服务开发框架
前言:目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等。其中所用到的数据传输方式包括 XML,JSON 等,然而 XML 相对体积太大,传输效率低,JSON 体积较小,新颖,但还不够完善。本文将介绍由 Facebook 开发的远程服务调用框架 Apache Thrift,它采用接口描述语言定义并创建服务,支持转载 2017-02-21 21:37:43 · 213 阅读 · 0 评论 -
Nginx事件驱动总结
其实最开始想要看nginx的源代码的初衷就是为了搞懂它的nginx的事件驱动到底是怎么回事。。。到现在为止nginx代码的大体结构部分已经看的差不多了,对它的事件驱动也算是有了一个较为全面的了解,终于可以写这篇文章了。。。首先用一张图来描述整个event的结构:首先最高层的是epoll自己定义的事件结构:[cpp] view plaincopy typedef union epoll_data转载 2017-02-21 17:06:11 · 524 阅读 · 0 评论 -
远程调用原理与对比(RMI、MINA、ESB、Hessian、SOAP、EJB)
1引用在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇 blog中转载 2017-02-21 21:28:53 · 433 阅读 · 0 评论 -
Netty事件驱动总结
netty也看了一段时间了,从最开始的勇斗不会用,到现在能够理解它的实现运行原理,还是蛮有成就感的。。而写到越发的觉得不管是c还是Java,其实最终设计都差不太多。。。好像如果要总结的写可以写很多字,画很多图,算了吧,好麻烦,一切尽在不言中,来一个图吧:转载 2017-02-21 21:29:21 · 172 阅读 · 0 评论 -
高性能的通讯库-ZeroMQ的几个高性能特征
这两天研究了一下ZeroMQ,号称史上最好的通讯库,比RabbitMQ快很多,基于C语言开发的,实时流处理sorm的task之间的通信就是用的ZeroMQ。ZeroMQ在使用模式上支持多种,有req-reply,publish-subscribe,push-pull。下图是ZeroMQ的架构图简单说明一下,从上到下依次是网络、ZeroMQ、用户的应用,相当于在应用层和网络层加了一个消息通信库这么一个转载 2017-02-21 21:30:08 · 722 阅读 · 0 评论 -
ZeroMQ阅读笔记
ZeroMQ是一种基于消息队列的多线程网络库,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间。ZeroMQ整体架构图如下:ZeroMQ的主要特性是面向消息进行通信,所以它提供的是比Libevent处在网络通信中更高一层的组件,如果程序员要使用ZeroMQ,只需要做如下事情:告知所使用的通信模型,比如请求回应模型(Request-Reply)、发布订阅模型转载 2017-02-21 21:31:42 · 248 阅读 · 0 评论 -
Netty之源代码解析
Netty始终要写一篇来作为终结的,但是到了写的时候才发现无从下手,了解 的还是不够吧。无奈,从四处摘录了一大片东西,很多都是官网下来的,没有什么文字说明,权当参考了。首先来一张总体架构图,这个是从Neety官网上摘下来的,描述了Netty的核心架构和总体功能。 1. BootStrap Bootstrap : ChannelFactory, ChannelPipeline, Channe转载 2017-02-21 21:33:41 · 262 阅读 · 0 评论 -
Java NIO框架Netty教程(五)-Netty中OIO模型(对比NIO)
一篇OIO和NIO对比的小研究。Netty中不光支持了Java中NIO模型,同时也提供了对OIO模型的支持。(New IO vs Old IO)。首先,在Netty中,切换OIO和NIO两种模式是非常方便的,只需要初始化不同的Channel工程即可。[java] view plain copy print?ServerBootstrap bootstrap =new ServerBootstra转载 2017-02-21 21:35:26 · 244 阅读 · 0 评论 -
Continuation 异步化机制
Jetty 的 Continuation 机制讨论 Jetty 的 Continuation 机制,首先需要提到 Ajax 技术,Ajax 技术是当前开发 Web 应用的非常热门的技术,也是 Web 2.0 的一个重要的组成部分。Ajax 技术中的一个核心对象是 XMLHttpRequest 对象,这个对象支持异步请求,所谓异步请求即是指当客户端发送一个请求到服务器的时候,客户端不必一直等待服务器转载 2017-02-21 21:36:03 · 187 阅读 · 0 评论 -
Java NIO原理图文分析及代码实现
前言: 最近在分析Hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。可以参考:http://baike.baidu.com/view/32726.htm )机制时,发现hadoop的RPC机制的实现主要用到了两个技术:动态代理(动态代理可以参考博客:http://weix转载 2017-02-21 21:37:02 · 136 阅读 · 0 评论 -
Netty代码分析
Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序[官方定义],整体来看其包含了以下内容:1.提供了丰富的协议编解码支持2.实现自有的buffer系统,减少复制所带来的消耗3.整套channel 的实现4.基于事件的过程流转以及完整的网络事件响应与扩展5.丰富的example。本文并不对Netty实际使用中可能出现的问题做分析,只转载 2017-02-21 21:44:14 · 168 阅读 · 0 评论 -
ZeroMQ的学习和研究
ZeroMQ,史上最快的消息队列—– ZMQ的学习和研究一、ZeroMQ的背景介绍引用官方的说法: “ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ的明确目标是 “成为标准网络协议栈的一部分,之后进入Linux内核”。现转载 2017-02-21 21:45:18 · 313 阅读 · 0 评论 -
ZeroMQ研究与应用分析
1 ZeroMQ概述ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。2 系统架构2.1 总体架构ZeroMQ几乎所有的I/O操作都是异步的,主线程不会被阻塞。ZeroMQ会根转载 2017-02-21 21:46:02 · 147 阅读 · 0 评论 -
Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析
有一段事件没有更新文章了,各种原因都有吧。搬家的琐事,搬家后的安逸呵呵。不过,OneCoder明白,绝不能放松。对于Netty的学习,也该稍微深入一点了。所以,这次OneCoder花了几天时间,仔细梳理了一下Netty的源码,总结了一下ServerBootStrap的启动和任务处理流程,基本涵盖了Netty的关键架构。 OneCoder总结了一张流程图: 该图是OneCoder通过阅读Ne转载 2017-02-21 21:52:14 · 235 阅读 · 0 评论 -
Java NIO框架Netty教程(三) – Object对象传递
说了这么多废话,才提到对象的传输,不知道您是不是已经不耐烦了。一个系统内部的消息传递,没有对象传递是不太现实的。下面就来说说,怎么传递对象。如果,您看过前面的介绍,如果您善于专注本质,勤于思考。您应该也会想到,我们说过,Netty的消息传递都是基于流,通过ChannelBuffer传递的,那么自然,Object也需要转换成ChannelBuffer来传递。好在Netty本身已经给我们写好了这样的转转载 2017-02-21 21:52:38 · 219 阅读 · 0 评论 -
Java NIO框架Netty教程(二) – 白话概念
“Hello World”的代码固然简单,不过其中的几个重要概念(类)和 Netty的工作原理还是需要简单明确一下,至少知道其是负责什。方便自己以后更灵活的使用和扩展。 声明,笔者一介码农,不会那么多专业的词汇和缩写,只能以最简单苍白的话来形容个人的感受和体会。如果您觉得这太不专业,笔者首先只能抱歉。然后,笔者曾转过《Netty代码分析》,您可参考。ChannelEvent先说这个Channe转载 2017-02-21 21:53:10 · 234 阅读 · 0 评论 -
Java NIO框架Netty教程(一) – Hello Netty
先啰嗦两句,如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技术,是服务于人而不是局限住人的。如果你已经万事具备,那么我们先从一段代码开始。程序员们习惯的上手第一步,自然是”Hello world”,不过Netty官网的例子却偏偏抛弃了”Hello world”。那我们转载 2017-02-21 21:53:42 · 331 阅读 · 0 评论 -
Java 7中的TransferQueue
Java7中加入了JSR 166y规范对集合类和并发类库的改进。其中的一项是增加了接口TransferQueue和其实现类LinkedTransferQueue。TransferQueue继承了BlockingQueue(BlockingQueue又继承了Queue)并扩展了一些新方法。BlockingQueue(和Queue)是Java 5中加入的接口,它是指这样的一个队列:当生产者向队列添加转载 2017-02-22 11:04:06 · 267 阅读 · 0 评论 -
Netty通信网络参数配置
Netty服务端/客户端网络通信过程中常用的参数:NameAssociated setter method“writeBufferHighWaterMark”默认64 * 1024(用法未知)“writeBufferLowWaterMark”默认32 * 1024(用法未知)“writeSpinCount”默认16(重复写次数,用法未知)“broadcast”true / fal转载 2017-02-22 11:04:31 · 345 阅读 · 0 评论 -
FutureTask 源码分析
FutureTask是JDK中Future模式的标准实现,它同时实现了Runnable和Future两个接口,提供了可取消的异步计算,并且可以利用开始和取消计算的方法、查询计算是否完成的方法和获取计算结果的方法。[java] view plain copy print?public class FutureTask<V> implements RunnableFuture<V> { /**转载 2017-02-22 11:05:04 · 221 阅读 · 0 评论 -
Java 中使用内存映射文件需要考虑的 10 个问题
Java中的内存映射IO和内存映射文件是什么?内存映射文件非常特别,它允许Java程序直接从内存中读取文件内容,通过将整个或部分文件映射到内存,由操作系统来处理加载请求和写入文件,应用只需要和内存打交道,这使得IO操作非常快。加载内存映射文件所使用的内存在Java堆区之外。Java编程语言支持内存映射文件,通过java.nio包和MappedByteBuffer 可以从内存直接读写文件。内存映射的转载 2017-02-22 11:13:58 · 230 阅读 · 0 评论 -
JAVA NIO 简介
1. 基本 概念 IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。 所有语言运行时系统提供执行 I/O 较高级别的工具。 (c 的 printf scanf,Java 的面向对象封装 ) 2. Java 标准 io 回顾 Java 标准 IO 类库是 io 面向对象的一种抽象。基于本地方法的底层实转载 2017-02-21 21:51:47 · 219 阅读 · 0 评论 -
Java NIO系列教程(一) Java NIO 概述
Java NIO 由以下几个核心部分组成:ChannelsBuffersSelectors虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。Channel 和 Buff转载 2017-02-21 21:51:23 · 182 阅读 · 0 评论 -
CGI跟我学
目 录 CGI脚本是什么?CGI脚本 怎样工作的?一个简单的例子我能用CGI脚本吗?你的服务器配置允许CGI脚本吗?你能编程吗?你应该用什么编程语言?你的服务器设置正确吗?如果你的服务器不是UNIX系统呢?解剖CGI脚本输出头部输出数据部带阐述的脚本传递其他信息给脚本创建特殊的脚本输出以装载另一个文本响应无响应处理表单的脚本表单格式和表单脚本GET 和 POSTURL 编码问题CGI 变转载 2017-02-21 21:46:38 · 266 阅读 · 0 评论 -
Java NIO系列教程(九) Java NIO与BIO
当学习了Java NIO和BIO的API后,一个问题马上涌入脑海:我应该何时使用BIO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和BIO的差异、它们的使用场景,以及它们如何影响您的代码设计。Java NIO和IO的主要区别下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。IO NIO面向流转载 2017-02-21 21:47:11 · 436 阅读 · 0 评论 -
Java NIO系列教程(八) FileChannel
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、 OutputStream或RandomAccessFile来获取一个Fi转载 2017-02-21 21:47:36 · 167 阅读 · 0 评论 -
Java NIO系列教程(七) DatagramChannel
Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:1DatagramChannel channel = DatagramChannel.open();2channel.socket().bi转载 2017-02-21 21:48:10 · 167 阅读 · 0 评论 -
Java NIO系列教程(六) ServerSocketChannel
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 Java.nio.channels包中。这里有个例子:01ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();02转载 2017-02-21 21:48:36 · 167 阅读 · 0 评论 -
Java NIO系列教程(五) SocketChannel
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:1SocketChannel转载 2017-02-21 21:49:02 · 204 阅读 · 0 评论