分类:编程语言

正向代理和反向代理

经常看到代理和反向代理,但是一直没弄明白2者具体有什么区别,看下面2张图来区别一下: 正向代理(或者叫代理):一般指客户这一端,替客户收发请求,使真实客户端对服务器不可见。 反向代理:在服务器机房这一端,替服务器收发请求,也就是说请求和响应都先经过反向代理,使真实服务器对客户端不可见。具有缓存、安全、负载均衡等作用。

阅读全文 »

Java Instrumentation 热替换

使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作了,这样的特性实际上提供了一种虚拟机级别支持的 AOP 实现方式,使得开发者无需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了。 网上的基于Instrumentation的说明有很多,不想做过多的介绍,下面基于项目中遇到的一些需求,做的一个简单的例子。 做的项目是一个手机网络游戏,游戏的业务变更性很强,特别是项目开发中以及项目上线后的前…

阅读全文 »

Netty实现Shadowsocks客户端

Shadowsocks是什么 shadowsocks是基于socks5协议实现的代理方式,分为服务器和客户端,双端之间通过使用指定的加密方式(AES,BlowFish,Table等)进行数据传输,有效的突破了GFW。 整个流程可以看来自网上的一张流程图: 总体流程大致如上图所示,具体实现细节后面会介绍,今天要实现的是SS Local这个模块,数据传输都是基于socks5协议,所以有必要先了解一下socks5协议。 socks5协议 SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器…

阅读全文 »

HttpClient模拟登录流程

不管是抢购火车票还是电商网站上抢购商品,如果在节假日没有抢购工具是很难靠手动抢到的,所以市面上的抢购工具也是层出不穷,但流程都是差不多的,大体上分为2步: 今天主要介绍一下第一步:模拟用户登录,作为登录我也把它拆分成了这4步: 准备 1.chrome浏览器:因为需要借助chrome强大的开发者工具 2.开源中国的在线工具:密码的加密解密和一些格式化工具方便查看 3.eclipse:开发工具 模拟登录–以下仅供个人学习使用 1.分析请求地址 主要分析验证码的请求,登录的请求,以及为登录提供参数的请求,选定一个网站比如:开源中国,进入它的登录界面:https://www.oschina…

阅读全文 »

Reactor和Proactor模式

在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。 同步和异步 同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知。 阻塞和非阻塞 阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。 I/O模型可以分为:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞IO 1.同步阻塞 用户进程在发起一个…

阅读全文 »

netty自定义协议

java越来越多的用于服务器端的开发,少不了的要与客户端,服务器内部其他模块进行通信,netty帮我们实现了底层的通信,也实现了对一些常用协议的支持,比如http等,但有时候我们需要保证数据的及时性,安全性,比如游戏开发,及时性我们可能需要尽可能的控制协议包的大小,这时候我们可以自定义协议。 总体将一个协议分为:协议头和协议数据 协议头: 协议数据:就是我们需要的业务对象,后面写的编解码器就是帮助我们 业务对象->二进制数据 编码 二进制对象-> 业务对象 解码 header对象 消息对象: header解码器: header编码器: 抽象解码器: 抽象编码器: 抽象方法中提供的transfo…

阅读全文 »