Spring+webSocket
引言websocket 是 HTML5新增加特性之一,目的是浏览器与服务端建立全双工的通信方式,解决 HTTP请求-响应带来过多的资源消耗,同时对特殊场景应用提供了全新的实现方式,比如聊天、股票交易、游戏等对对实时性要求较高的行业领域。
STOMPSTOMP(Simple Text-Orientated Messaging Protocol) 面向消息的简单文本协议。
WebSocket是一个消息架构,不强制使用任何特定的消息协议,它依赖于应用层解释消息的含义;
与处在应用层的HTTP不同,WebSocket处在TCP上非常薄的一层,会将字节流转换为文本/二进制消息,因此,对于实际应用来说,WebSocket的通信形式层级过低,因此,可以在 WebSocket 之上使用 STOMP协议,来为浏览器 和 server间的 通信增加适当的消息语义。
如何理解 STOMP 与 WebSocket 的关系:
HTTP协议解决了 web 浏览器发起请求以及 web 服务器响应请求的细节,假设 HTTP 协议 并不存在,只能使用 TCP 套接字来 编写 web 应用,你可能认为这是一件疯狂的事 ...
谈谈敏捷开发
引言敏捷开发是一种从上个世纪九十年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。常言道:“天下武功,唯快不破”,此言用于形容“敏捷”的威力相当合适。敏捷意思为快,但敏捷思想不仅仅求快,它更多强调“多快好省”,产出得多,产出得快,产出得好,同时节省各种成本,既经济又实用。它们更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发过程中人的作用。
敏捷开发宣言和原则敏捷宣言的价值观
个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划
也就是说,尽管右项有其价值,我们更重视左项的价值。
敏捷宣言的原则
我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。
欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。
经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
业务人员和开发人员必须相互合作, ...
Sping定时任务
引言在企业开发中,经常会遇到时间任务调度的需求,比如每天凌晨生成前天报表、数据汇总等动态配置是否开启定时的任务。在Java领域中,定时任务的开源工具也非常多,小到一个Timer类,大到Quartz框架。在Spring中最常见的定时任务方式属Spring schedule注解的方式和利用Quartz动态管理定时任务。总体来说,个人比较喜欢的还是Quartz,功能强大而且使用方便。
Spring-@scheduled对于较简单的任务可以使用Spring内置的定时任务方法@scheduled注解进行配置达到自己的需求。
spring配置文件配置spring项目的基础文件spring.xml
123456789101112131415161718<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:task="http://www.springframework.org/schema/task" xmlns="http://www.sp ...
大话数据库连接池
引言数据库连接池在Java数据库相关中间件产品群中,应该算是最底层最基础的一类产品,作为企业应用开发必不可少的组件,无数开发者们贡献了一个又一个的优秀产品,它们有的随着时代发展,功成身退,有的还在不断迭代,老而弥坚,更有新生代产品,或性能无敌、或功能全面。接下来就聊一聊 “那些年,我们用过的数据库连接池。”
第一、二代连接池区分一个数据库连接池是属于第一代产品还是代二代产品有一个最重要的特征就是看它在架构和设计时采用的线程模型,因为这直接影响的是并发环境下存取数据库连接的性能。
一般来讲采用单线程同步的架构设计都属于第一代连接池,二采用多线程异步架构的则属于第二代。比较有代表性的就是Apache Commons DBCP,在1.x版本中,一直延续着单线程设计模式,到2.x才采用多线程模型。
用版本发布时间来辨别区分两代产品,则一个偷懒的好方法。以下是这些常见数据库连接池最新版本的发布时间:
数据库连接池
最新版本
发布时间
C3P0
c3p0-0.9.5.2
on 9 Dec 2015
DBCP
2.2.0
27 December 2017
Druid
0.11. ...
Nginx配置文件详解
引言之前介绍了Linux下安装Nginx,Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内核 Poll 模型,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
Nginx特点Nginx 具有很高的稳定性。其它 HTTP 服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前 apache 一旦上到 200 个以上进程,web响应速度就明显非常缓慢了。而 Nginx 采取了分阶段资源分配技术,使得它的 CPU 与内存占用率非常低。Nginx 官方表示保持 10,000 个没有活动的连接,它只占 2.5M 内存,所以类似 DOS 这样的攻击对 Nginx 来说基本上是毫无用处的。就稳定性而言,Nginx 比 lighthttpd 更胜一筹。
Nginx 支持热部署。启动特别容易,并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动。还能够在不间断服务的情况下,对软件版本进行进行升级。
Nginx的用处说了这么多Nginx的优点,Nginx ...
HttpClient后台跨域
引言跨域可以说是一个经常遇到的问题,最近在联调一个身份证识别接口,该接口由python语言编写,Java语言调用,刚开始采用了CORS(Cross-Origin Resource Sharing)跨域,在IE8上一直出现兼容性问题,固定的思维容易出现错误,自己一直想着前端Ajax跨域而忽略了后台HttpClient的跨域,最后还是用HttpClient顺利解决问题,避免了浏览器跨域带来的兼容性问题。
HttpClient VS Jsonp之前的博客有说过Jsonp的跨域方式,jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本。相比于HttpClient,Jsonp有两个很大的缺点:
1、它只能发送get请求,如果发送post请求会造成无法解析获取不到数据的问题。
2、如果返回的数据没有经过配置相应的编码文件来处理,拿到的数据可能会是一堆乱码。
问题总是能解决,HttpClient则没那么多约束,HttpClient封装了http协议的jar包,基本的请求方法get、post、put、 delete都能实现,当然得在web.xml文件中配置相应的fil ...
说说JSON和JSONP
前言说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服务器端代理来解决。
JSON和JSONP虽然只有一个字母的差别,但其实他们根本不是一回事:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议。我们拿最近比较火的谍战片来打个比方,JSON是地下党们用来书写和交换情报的“暗号”,而JSONP则是把用暗号书写的情报传递给自己同志时使用的接头方式。看到没?一个是描述信息的格式,一个是信息传递双方约定的方法。
什么是JSON前面简单说了一下,JSON是一种基于文本的数据交换方式,或者叫做数据描述格式,你是否该选用他首先肯定要关注它所拥有的优点。
JSON的优点
基于纯文本,跨平台传递极其简单;
JavaScript原生支持,后台语言几乎全部支持;
轻量级数据格式,占用字符数量极少,特别适合互联网传递;
可读性较强,虽然比不上XML那么一目了然,但在合理的依次缩进之后还是很容易识别的;
容易编写 ...
Linux下安装Nginx
记录下Linux下安装Nginx。
Nginx安装环境Nginx是C语言开发,建议在Linxu上运行,下面操作实在Centos6.5上的安装环境。
gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc。
安装命令:yum install gcc-c++
PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
安装命令:yum install -y pcre pcre-devel
zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
安装命令:yum install -y zlib zlib-devel
openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的 ...
