Web ’ 目录归档

《Spring 5 官方文档》22. WebSocket Support

原文链接  译者信息:Dan  QQ:903585177

22. WebSocket 支持

参考文档的这一部分涵盖了Spring框架对Web应用程序中WebSocket风格消息传递的支持,包括使用STOMP作为应用程序级WebSocket子协议。

Section 22.1, “Introduction” 建立一个WebSocket的大致框架,涵盖应用挑战,设计考虑以及何时适合的想法。

Section 22.2,“WebSocket API” 介绍了服务端的Spring WebSocket API,Section 22.3,“SockJS Fallback Options” 介绍了SockJS 协议,并且展示如何配置和使用它.

Section 22.4.1, “Overview of STOMP” 介绍 STOMP 信息协议. Section 22.4.2, “Enable STOMP over WebSocket” 展示如何在Spring配置STOMP. Section 22.4.4, “Annotation Message Handling” 以下部分说明如何编写注释消息处理方法,发送消息,选择消息代理选项,以及与特殊“用户”目的地的工作. 最后, Section 22.4.18,“Testing Annotated Controller Methods” 列出了测试STOMP / WebSocket应用程序的三种方法.

阅读全文

《Http Client 官方文档》7. 高级主题

原文链接 译者:flystarfly

第七章 高级主题

7.1. 自定义客户端连接

在某些情况下,有必要自定义HTTP消息传输的方式来扩展HTTP参数的可使用性,以便能够处理非标准的作业。 例如,对于网络爬虫,可能需要强制HttpClient接受格式不正确的响应头,来捕捉消息的内容。

阅读全文

《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 请求的示例:

阅读全文

《Apache Velocity用户指南》官方文档

原文链接   译文连接 译者:小村长  校对:方腾飞

Quick Start

本项目是 Apache Velocity官方文档的中文翻译版,Velocity类似与JSP,是一种基于Java的模板引擎。它可以在web页面中引用Java代码中定义的数据和对象,而Velocity的作用就是把Web视图和java代码进行组装在一起。本次翻译主要针对对Velocity感兴趣和工作中使用到Velocity的开发人员提供有价值的中文资料,希望能够对大家的工作和学习有所帮助。

由于我也是第一次接触Velocity,还不是很深入,翻译的时候也查看了一些博客以及其他网上资料。也尝试着去了解它和JSP方面的差别以及优缺点,同时也去了解了下它和其他Java引擎模板的区别,比如freemaker的区别,等等。但是还是因为能力见识有限,翻译过程中难免出现个人的主观或者客观原因导致与官方文档存在差异。在此,我还是建议有能力的童鞋能够自己去Velocity官方看看。

阅读全文

JSON数据乱码问题

背景
程序员一提到编码应该都不陌生,像gbk、utf-8、ascii等这些编码更是经常在用,但时不时也会出个乱码问题,解决这个问题的方法大部分都是先google和baidu一下,最后可能在某个犄角旮旯里找到一点信息,然后就机械的按部就班的模仿下来,结果问题可能真就迎刃而解了,然后就草草了事,下回遇到相似的问题,可能又是重复上面的过程。很少有人有耐心去花精力弄明白这写问题的根本原因,以及解决这些问题的原理是什么。这篇文章就是通过一个实际案例,试着去讲清楚什么是编码,乱码又是怎么产生的,以及如何解决。该案例是从lua_cjson.c这个库开始的,对这个库不熟悉也没关系,也不需要熟悉它,我们只是借用它来说明乱码问题,只需要跟着文章的思路走就可以。

阅读全文

《 Java并发编程从入门到精通》Thread安全与不安全

javaC作者:张振华    购买链接:天猫商城  JD商城  当当书店

鸟欲高飞先振翅,人求上进先读书。本文是原书的第3章  Thread安全3.2 什么是不线程安全。3.3什么是线程不安全。

3.2 什么是不安全?

当多个线程同时操作一个数据结构的时候产生了相互修改和串行的情况,没有保证数据的一致性,我们通常称之这种设计的代码为”线程不安全的“。

阅读全文

Tomcat-connector的微调(3): processorCache与socket.processorCache

tomcat在处理每个连接时,Acceptor角色负责将socket上下文封装为一个任务SocketProcessor然后提交给线程池处理。在BIO和APR模式下,每次有新请求时,会创建一个新的SocketProcessor实例(在之前的tomcat对keep-alive的实现逻辑里也介绍过可以简单的通过SocketProcessorSocketWrapper实例数对比socket的复用情况);而在NIO里,为了追求性能,对SocketProcessor也做了cache,用完后将对象状态清空然后放入cache,下次有新的请求过来先从cache里获取对象,获取不到再创建一个新的。

这个cache是一个ConcurrentLinkedQueue,默认最多可缓存500个对象(见SocketProperties)。可以通过socket.processorCache来设置这个缓存的大小,注意这个参数是NIO特有的。

接下来在SocketProcessor执行过程中,真正的业务逻辑是通过一个org.apache.coyote.Processor的接口来封装的,默认这个Processor的实现是org.apache.coyote.http11.Http11Processor。我们看一下SocketProcessor.process(...)方法的大致逻辑:

阅读全文

Tomcat-connector的微调(2): maxConnections, maxThreads

1) 最大连接数

tomcat的最大连接数参数是maxConnections,这个值表示最多可以有多少个socket连接到tomcat上。BIO模式下默认最大连接数是它的最大线程数(缺省是200),NIO模式下默认是10000,APR模式则是8192(windows上则是低于或等于maxConnections的1024的倍数)。如果设置为-1则表示不限制。

在tomcat里通过一个计数器来控制最大连接,比如在Endpoint的Acceptor里大致逻辑如下:

阅读全文

Tomcat-connector的微调(1): acceptCount参数

对于acceptCount这个参数,含义跟字面意思并不是特别一致(个人感觉),容易跟maxConnections,maxThreads等参数混淆;实际上这个参数在tomcat里会被映射成backlog:

static {
    replacements.put("acceptCount", "backlog");
    replacements.put("connectionLinger", "soLinger");
    replacements.put("connectionTimeout", "soTimeout");
    replacements.put("rootFile", "rootfile");
}

backlog表示积压待处理的事物,是socket的参数,在bind的时候传入的,比如在Endpoint里的bind方法里:

阅读全文

处理JSON的Java API :JSON的简介

原文链接  作者:Jitendra Kotamraju   译者:撒木

处理JSON的各种解析、生成、处理、转换和查询的JAVA API

JSON (JavaScript Object Notation)是一种轻量级的、基于文本的、完全独立于语言的数据交换格式。它非常方便人们和机器的阅读和书写。JSON 有两种结构类型的表现方式对象和数组。对象是名/值对的无序集合。数组是值(value)的有序集合。值的类型可以是字符串(在双引号中)、数字(整数或浮点数)、逻辑值(true或false)、数组(在方括号中)、对象(在花括号中)、null。

阅读全文

Netty-Mina深入学习与对比(二)

感谢支付宝同事[易鸿伟]在本站发布此文。

上文netty-mina深入学习与对比(一)讲了对netty-mina的线程模型以及任务调度粒度的理解,这篇则主要是讲nio编程中的注意事项,netty-mina的对这些注意事项的实现方式的差异,以及业务层会如何处理这些注意事项。

1. 数据是如何write出去的

java nio如果是non-blocking的话,在每次write(bytes[N])的时候,并不会将N字节全部write出去,每次write仅一部分(具体大小和tcp_write_buffer有关)。那么,mina和netty是怎么处理这种情况的呢?

阅读全文

Web Services 概述

原文链接译文链接,译者:朱张锁,校对:郭蕾

术语“web服务”经常用来描述一个客户端(计算机)可通过互联网进行远程调用一个服务,通过诸如HTTP的Web协议。比如调用不同机器上的一个方法、过程或函数。因此Web服务非常类似于是“远程过程调用”(或只是“远程”)协议。比如java的RMI,Windows DCOM,CORBA的IIOP等。这些Web服务的原理如下图所示:

web-service-overview-1

(一个客户端通过互联网调用Web服务)

阅读全文

Tomcat7.0.26的连接数控制bug的问题排查

感谢同事[空蒙]的投稿。

首先感谢@烈元一起排查此问题。今天发现线上一台机器,监控一直在告警,一看是健康检查不通过,就上去查看了下,首先自己curl了下应用的url,果然是超时没有响应,那就开始按顺序排查了:

1、 load非常低,2、gc也正常,3、线程上也没死锁,4、日志一切正常。那是什么情况呢,不能忘记网络啊。果然,netstat命令一把,结果如下:

TIME_WAIT 68
CLOSE_WAIT 194
ESTABLISHED 3941
SYN_RECV 100

问题出来了,SYN_RECV竟然达到100个,正常情况下,半连接的请求应该是很小的。而且我们机器是内部的,不是lvs,不太会有半连接攻击,怎么可能达到这么大呢?

阅读全文

Netty源码解读(四)Netty与Reactor模式

Reactors

一:Netty、NIO、多线程?

时隔很久终于又更新了!之前一直迟迟未动也是因为积累不够,后面比较难下手。过年期间@李林锋hw发布了一个Netty5.0架构剖析和源码解读 ,看完也是收获不少。前面的文章我们分析了Netty的结构,这次咱们来分析最错综复杂的一部分-Netty中的多线程以及NIO的应用。

理清NIO与Netty的关系之前,我们必须先要来看看Reactor模式。Netty是一个典型的多线程的Reactor模式的使用,理解了这部分,在宏观上理解Netty的NIO及多线程部分就不会有什么困难了。

本篇文章依然针对Netty 3.7,不过因为也看过一点Netty 5的源码,所以会有一点介绍。

阅读全文

return top