标签 ‘ JAVA

线程亲和性(Thread Affinity)

原文链接 译者:裘卡

如果你正在开发低延迟的网络应用,那应该对线程亲和性(Thread affinity)有所了解。线程亲和性能够强制使你的应用线程运行在特定的一个或多个cpu上。通过这种方式,可以消除操作系统进行调度过程导致线程迁移所造成的影响。幸运的是,刚好有一个这么一个java库 Java-Thread-Affinity ,并且很容易就可以整合到你的netty应用中。

阅读全文

《Log4j官方文档》 JSON配置

Log4j不仅能通过XML配置,也能通过JSON配置。如你所知,JSON的格式非常类似于紧凑版XML。每个键代表了插件名称,对应的值是属性。键中可以有子级插件。如下,“ThresholdFilter, Console, PatternLayout”都是插件。Console的值是“STDOUT”,意为日志控制台输出;“ThresholdFilter”的值是被设为调试级。
阅读全文

《Spring Data 官方文档》4.7 Spring Data扩展

原文链接 译者:zhanghTK

4.7 Spring Data扩展

这部分说明Spring Data一系列的扩展功能,可以使Spring Dta使用多样的上下文.目前大部分集成是针对Spring MVC.
阅读全文

《HttpClient 官方文档》第三章 HTTP 状态管理

原文链接 译者[陈志军]

通常 HTTP 被设计为无状态,面向请求/响应的协议,对于有一些逻辑相关的请求/响应交换的有状态会话没有特别的规定。正当 HTTP 协议越来越流行和被认可,越来越多之前没有打算使用它的系统,现在也开始为了应用程序而使用它。例如电子商务应用的内容传输。因此,支持 HTTP 状态管理变得非常有必要。
NetScape(网景公司),曾经引领网页客户端和服务器端软件的发展,在他们的产品中基于专有的规范,提供了 HTTP 状态管理的支持。之后,NetScape 尝试通过发布规范草案来标准化这种机制。这些努力通过 RFC 标准促进了正式的规范定义。但是,状态管理在很多应用程序中仍然支持 Netscape 的草案而不兼容官方的标准。很多Web浏览器的主要开发人员觉得有必要保留这些极大地促进标准兼容性的草案。

阅读全文

《HttpClient 官方文档》第五章 Fluent API

原文链接  译者[white]

第五章:流式 API

5.1 易用 API 接口

4.2版本的 HttpClient 带来了一组非常容易使用的流式 API(Fluent API) 接口。暴露的流式API(Fluent API) 接口中仅仅是 HttpClient 最基本的一些功能,这些接口是在不需要使用 HttpClient 丰富的灵活性时,为了一些简单的功能而准备的。 例如:流式接口(Fluent API) 增加了使用者对连接的管理和资源的分配上的便利性。这里有一系列通过 HttpClient 流式接口(Fluent API) 执行 HTTP 请求的示例:

阅读全文

《Netty in Action》中文版—第七章 EventLoop和线程模型

本文翻译自《Netty in Action》第七章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

本章包含

  • 线程模型概览
  • Event Loop的概念和实现
  • Task调度
  • 实现详解

简单来说,线程模型定义了操作系统,编程语言,框架或者应用程序线程管理的关键部分。线程是如何,并且何时被创建,显然对代码的执行有很大的影响。因此,开发者需要理解不同线程模型中存在的权衡利弊。无论他们是直接为自己选择模型,还是通过用一种语言或者框架隐性地来选择模型,这一点都是毋庸置疑的。

在这一章我们会详细探讨Netty的线程模型。Netty线程模型很强大,不过用起来很简单。Netty总是一如既往地简化你的应用代码,最大化应用的性能和可维护性。我们还会讨论到我们选择Netty目前这个线程模型的整个过程。

如果你对Java并发API(java.util.concurrent)有一个大致的了解,你会感觉本章的讨论很清晰明了。如果你对这些概念不熟悉,或者需要再回忆下,Brian Goetz和其他人合著的《Java并发编程实战》是个很棒的资源。
阅读全文

《Netty in Action》中文版—第六章 ChannelHandler和ChannelPipeline

本文翻译自《Netty in Action》第六章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

本章包含

  • ChannelHandler和ChannelPipeline APIs
  • 检测资源泄露
  • 异常处理

在前一章,你学习了Netty的数据容器ByteBuf。在这一章我们会在你已经学过的知识的基础上探讨Netty的数据流和处理模块。你会开始看到这个框架的一些重要元素被组合到一起了。

你已经了解到,ChannelHandler在一个ChannelPipeline中被链在一起,将所有的处理逻辑组织起来。我们会在这一章学习有关这两个类的各种用例,以及另一个重要的相关类,ChannelHandlerContext。

理解所有这些组件之间的相互作用是用Netty创建一个模块化的,可复用应用的关键。
阅读全文

《Netty in Action》中文版—第五章 ByteBuf

本文翻译自《Netty in Action》第五章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

本章包含

  • ByteBuf—Netty的数据容器
  • API详情
  • 用例
  • 内存分配

正如我们前面提到的,网络数据的基础单位总是字节。Java NIO用ByteBuffer做它的字节容器,但是这个类使用起来过于复杂,有时候还非常麻烦。

Netty用ByteBuf替代了ByteBuffer,这个强大的实现突破了JDK API的限制,为网络开发者提供了更好的API。

在这一章我们会展现同ByteBuffer相比,ByteBuf的出色功能和灵活性。这也让你从大体上更好地理解Netty数据处理的方式,并且为第六章ChannelPipeline和ChannelHandler的讨论做好准备。
阅读全文

《Netty in Action》中文版—第四章 传输

本文翻译自《Netty in Action》第四章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

 

本章包含

  • OIO—阻塞传输
  • NIO—异步传输
  • 本地传输—JVM内部的异步通信
  • 嵌入式传输—测试你的ChannelHandler

经过一个网络的数据通常是同一种类型:字节。这些数据是如何移动的基本上取决于被我们称之为网络传输的概念,这个概念帮我们抽象了底层的数据传输机制。用户不关心细节,他们只关心他们的字节数据被可靠地传送和接收。

阅读全文

《Netty in Action》中文版—第三章 Netty的组件和设计

本文翻译自《Netty in Action》第三章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

本章包含

  • Netty的技术和架构方面
  • ChannelEventLoopChannelFuture
  • ChannelHandlerChannelPipeline
  • Bootstrapping

在第一章我们总结了Java高效能网络编程的历史和技术基础,这为概述Netty的核心概念和构造模块提供了一个背景。

在第二章我们把讨论范围扩展到应用开发。通过创建一个简单的客户端和服务器你学到了bootstrapping,获得了一些亲自实践核心ChannelHandler API的经验。与此同时,你也验证了你的开发工具是可以正常工作的。

以这些内容为基础,在本书剩下的部分,我们会从两个不同但是密切联系的角度来研究Netty:做为一个类库和做为一个框架。这两个方面对用如何Netty开发高效,可重用,可维护的代码都很关键。

从一个高层次的角度来看,Netty解决了两个相应领域的问题,我们可以大体上称其为技术上的(technical)和结构上的(architectural)。首先,它的异步和事件驱动基于Java NIO实现,在高负载下能保证最好的应用性能和可扩展性。第二,Netty包含了一系列用来解耦应用逻辑和网络层的设计模式,简化了开发的同时最大限度地提升了可测试性,模块化和可重用性。

随着我们更具体地学习Netty的单个组件,我们将会密切关注这些组件是如何配合来支持结构的最佳实践(best practices)。遵循同样的原则,我们就能收获Netty提供的所有好处。在这个目标的指引下,在这一章,我们会回顾下到目前为止我们已经介绍过的主要概念和组件。

3.1 ChannelEventLoopChannelFuture

下面几个小节会对我们讨论的ChannelEventLoopChannelFuture类增加一些细节,它们合起来可以被看成是Netty的网络抽象(Networking abstraction)

  • ChannelSockets
  • EventLoop—控制流,多线程,并发
  • ChannelFuture—异步通知

阅读全文

《Netty in Action》中文版—第二章 你的第一个Netty应用

本文翻译自《Netty in Action》第二章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

本章包含:

  • 创建开发环境
  • 编写一个Echo服务器和客户端
  • 编译测试应用

在这一章我们将会向你展示如何创建一个基于Netty的客户端和服务器。这两个应用很简单—客户端送消息到服务器,服务器再将该消息送回客户端—不过,基于两个原因,这个练习很重要。

首先,它提供了一个创建和验证开发工具及环境的试验台。如果你打算用书里的示例代码来准备你自己的开发,那么这一点很重要。

第二,你能积累一些亲手实践前一个章节提到的Netty关键部分的经验:用ChannelHandlers来创建应用逻辑。这能帮你为从第三章开始的Netty API深入学习做好准备。
阅读全文

哪个线程执行 CompletableFuture’s tasks 和 callbacks?

原文链接  作者:Tomasz Nurkiewicz   译者:simonwang

CompletableFuture尽管在2014年的三月随着Java8被提出来,但它现在仍然是一种相对较新潮的概念。但也许这个类不为人所熟知是好事,因为它很容易被滥用,特别是涉及到使用线程和线程池的时候。而这篇文章的目的就是要描述线程是怎样使用CompletableFuture的。

阅读全文

ExecutorService-10个要诀和技巧

原文链接 作者:Tomasz Nurkiewicz    译者:simonwang

ExecutorService抽象概念自Java5就已经提出来了,现在是2014年。顺便提醒一下:Java5和Java6都已不被支持,Java7在半年内也将会这样。我提出这个的原因是许多Java程序员仍然不能完全明白ExecutorService到底是怎样工作的。还有很多地方要去学习,今天我会分享一些很少人知道的特性和实践。然而这篇文章仍然是面向中等程序员的,没什么特别高级的地方。

阅读全文

《Netty in Action》中文版—第一章 Netty—异步和事件驱动

本文翻译自《Netty in Action》第一章  

作者:Norman Maurer, Marvin Allen Wolfthal   译者:桃小胖

本章包含

  • Java的网络编程
  • Netty初探
  • Netty的核心组件

假设你即将要为一个重要的大公司开发一个新的关键任务的应用程序。在第一次会议上,你了解到这个系统必须能无性能损耗地扩展到支持15万个并发用户。这时所有的人都看着你,你会说什么?
阅读全文

《Netty in Action》中文版 — 第一部分前言

本文翻译自《Netty in Action》第一部分前言 

作者:Norman Maurer, Marvin Allen Wolfthal    译者:桃小胖

Netty是一个用于创建高性能网络应用的成熟框架。在本书的第一部分,我们将深入探讨Netty的性能,同时展现以下三个要点:

  • 你不必成为一个网络专家,才能用Netty搭建应用
  • 使用Netty比直接使用底层的Java APIs要简单的多
  • Netty能促成良好的设计原则,比如说解耦你的应用层逻辑和网络层

阅读全文

return top