静态的log4j.properties配置文件
一般Java Web项目中我们都配置log4j.properties文件并配合使用slf4j的Logger接口(出于简洁性和性能不建议使用log4j的Logger接口)来记录日志,常用的日志级别优先级从高到低分别是ERROR、WARN、INFO、DEBUG;而通常为了减少服务器输出过多日志导致的性能损耗,一般线上配置的日志级别都是为WARN或者ERROR,例如常见的log4j.properties配置如下:
一般Java Web项目中我们都配置log4j.properties文件并配合使用slf4j的Logger接口(出于简洁性和性能不建议使用log4j的Logger接口)来记录日志,常用的日志级别优先级从高到低分别是ERROR、WARN、INFO、DEBUG;而通常为了减少服务器输出过多日志导致的性能损耗,一般线上配置的日志级别都是为WARN或者ERROR,例如常见的log4j.properties配置如下:
赫赫有名的雅虎前端优化14条军规其实早在2007年就被雅虎首席性能工程师Steve Souders总结成书并由著名的计算机书籍出版商O'Reilly出版——《High Performance Web Sites》(中译版《高性能网站建设指南》则是在2008年由电子工业出版社出版),这里记录下自己在真实的线上项目中如何根据情况去实施这些军规,即作为个人总结也作抛砖引玉之用
Netty-SocketIO是GitHub上一个基于Netty开发实现SocketIO协议的服务器端框架,在前一篇博客《Cocos2d-JS/Ajax用Protobuf与NodeJS/Java通信》的长连接中就提到了SocketIO协议以及Netty-SocketIO库,对SocketIO/WebSocket协议以及Netty-SocketIO不熟悉的可以先去看看,本篇博客的重点在Netty-SocketIO中如何整合使用Redisson
Protobuf全称为“Protocol Buffers”,是Google开源出来的一个序列化协议并配备多种编程语言的实现(Java、C、C++、Python等,甚至JavaScript、ActionScript都有对应的实现),其本质是按照协议规范编写proto文件,该proto文件内容由若干个message消息体组成,而message消息体是由编程语言中常用的数据类型(int、long、String等)对应的Protobuf字段类型组合而成的,Protobuf的作用是可以帮你把定义好的message消息体按协议编码(Encode)转为二进制字节流(byte[]),反之亦可帮你把已编码的byte[]字节流再解码(Decode)还原回来。
Bob大叔在《代码整洁之道》(英文版《Clean Code》)提到过他曾做过一个类似竞技游戏(魔兽、Dota、LOL等)中“第一视角”的视频,去查看自己编码工作时到底大部分时间都在做什么,结果发现自己80%(甚至更多)的时间都是在屏幕相关代码类、代码行之间跳来跳去的观看并理解代码所做的事情,只有20%的时间是动手编码,即二八原则在此处依旧成立。
在Doug Lea大神的经典NIO框架文章《Scalable IO in Java》中,具体阐述了如何把Reactor模式和Java NIO整合起来,一步步理论结合Java代码实践去构建了一套高伸缩性的网络处理框架雏形,从当今的流行NIO框架(Netty、Main、Grizzly)中无不看到其本质均与该文章所述架构不谋而合(或者也可以说其实是借鉴并以现代化的方式实现了Doug Lea的思想吧),这里总结《Scalable IO in Java》中的要点并记录下自己实现多Reactor的过程中遇到的坑
先根据《创建GitHub技术博客全攻略》去做一些前期GitHub上的测试准备工作,然后再根据《使用 GitHub, Jekyll 打造自己的免费独立博客》这篇文章直接fork了该博主的StrayBirds项目来快速搭建了自己的博客