漫谈登录桩(MockStub)的实现
2014年6月4日,6月的第一个星期三,我正式入职百度,开始baiduer的工作。这不到2个月的时间,因为人力资源这边原因,我从INF部门离开,拉到了百度Hi-Server团队中来。2个完全不着调的岗位,做了许多以前没有做过的事情。总结一下:在INF的产品线是新产品,9月百度世界大会才上线的,很多东西不便透露;百度Hi-Server产品线相对来说就算是个老产品了,持续做了好几年了。7月中旬切到Hi-Server这边,不到这一个月的时间,主要Support了三个事情:一个登录桩的实现和一个公众平台iOS消息推送,还有消息报文协议的单测。登陆桩的实现用的是Python语言完成的,主要的时间消耗在公司自定义的2个类的实现。公众平台iOS消息推送则是在原有项目的基础上增加了一些代码,以便于支持公众账号信息的推送力。消息报文的单测,使用的是gtest测试框架,使用基于参数化的方案实现的。关于gtest单测,这个系列帖子算个精华帖:http://www.cnblogs.com/coderzh/archive/2009/04/08/1431297.html.今天主要和大家分享一下登陆桩实现中遇到的一些问题!
一、登陆桩做什么?
项目需要做一些线下的压力测试,主要是针对新增的一些模块的性能进行测评,所以需要提供一个模拟登陆服务的桩以Support这个测评工作。登陆桩它是个Mock的登陆服务,在接收到登陆请求以后,模拟真实的登陆服务,构造一个认证后的串作为响应报文返回,达到模拟登陆的目的。
二、登陆桩该怎么做?
根据上面对登陆桩需求的分析,我们可以把登陆桩的实现划分如下:
1. 监听服务:建立一个TCP连接,在指定端口监听登陆请求;
2. 解析请求包:收到的请求包是按照一定格式压缩加密而来的,桩需要对其解密解压缩把我们需要关注的字段取出来;
3. 构造响应包:根据我们解析后的请求报文,我们按照真实登陆服务的响应报文格式去构造该条请求报文所对应的响应报文,然后对该报文压缩加密后响应给请求方;
4. 并发性:桩需要支持多个账户并发模拟登录,所以我们需要实现的服务应该是一个多线程的。
三、大刀阔斧实现登陆桩!
请求响应报文的格式涉及到公司的机密,所以不在这里详细表述。报文主要的思路就是:
实例-->Json化-->pack-->加密-->发送----------------接收--------------->解密-->unpack-->反Json化-->得到具体的字段信息.
构造响应包-->Json化-->pack-->加密-->响应!
今天的主要内容是并发Socket的使用,在Python中,使用SocketServer模块建立连接,SocketServer.ThreadingTCPServer类支持并发TCP连接。那么该怎么使用这个并发TCP服务呢?让我们一步步慢慢来。
首先就是实现一个自定义的TCPHandle类了,我是这样定义的:
class MyTCPHandle(SocketServer.StreamRequestHandler):
在该自定义类中,需要实现handle方法:
def handle(self):
最后就是在main中去建立TCP连接:
mockserver = SocketServer.ThreadingTCPServer(('', int(sys.argv[1])), MyTCPHandle)
第二个参数是服务的端口,我是通过传参的方式去完成的。
最后,TCP开始了忙碌的工作:
mockserver.serve_forever()
这篇日志,从7月28就开始写,一直忙工作,时间抽不出来,今天算是下定决心给写完了。不过看内容方面,明显和我当时打算写日志时候差了很多,就这样吧,希望能多少帮到大家一点!
Published with Windows LiveWriter.
漫谈登录桩(MockStub)的实现的更多相关文章
- 漫谈单点登录(SSO)(淘宝天猫)
1. 摘要 ( 注意:请仔细看下摘要,留心此文是否是您的菜,若浪费宝贵时间,深感歉意!!!) SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂,各式各样应有尽有!开 ...
- 漫谈单点登录(SSO)(淘宝天猫)(转载)
1. 摘要 ( 注意:请仔细看下摘要,留心此文是否是您的菜,若浪费宝贵时间,深感歉意!!!) SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂,各式各样应有尽有!开 ...
- 漫谈单点登录(SSO)
1. 摘要 ( 注意:请仔细看下摘要,留心此文是否是您的菜,若浪费宝贵时间,深感歉意!!!) SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂,各式各样应有尽有!开 ...
- 【效率工具】SSH一键登录脚本(可一键从跳板机登录线上服务器)
说明 前阵子上线,一次性上了十个服务,一直上到凌晨才完事,期间每个服务都要先输入跳板机的登录信息来登录跳板机,然后再输入线上服务器的信息来登录线上服务器,实在是太过于麻烦,而且有些服务还有好几台服务器 ...
- NGINX:漫谈优化
优化那些事儿 生产环境下网站做前期的优化肯定是比不可少的,简单来说就是用同等条件的硬件资源,处理更多的网站业务,大程度提供网站业务处理能力:前辈留下的实战经验可都是财富,好多坑只有踩过才知道痛,下面就 ...
- 漫谈程序猿系列:无BUG不生活
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...
- 技术漫谈 | 远程访问和控制云端K8S服务器的方法
对于部署在云端的K8S容器编排系统,可以先通过SSH远程登录到K8S所在主机,然后运行kubectl命令工具来控制K8S服务系统.然而,先SSH登录才能远程访问的二阶段方式,对于使用Linux桌面或者 ...
- 漫谈:从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃monkey日志
漫谈:从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃日志 1.APP崩溃率标准 开发或测试app的同学,对于app崩溃肯定非常熟悉,频繁的线上崩溃属 ...
- 【小程序分享篇 二 】web在线踢人小程序,维持用户只能在一个台电脑持登录状态
最近离职了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考. 换工作心里挺忐忑, 对未来也充满了憧憬与担忧.(虽然已是老人, 换了N次工作了,但每次心里都和忐忑). 写写代 ...
随机推荐
- BZOJ 3130: [Sdoi2013]费用流 网络流+二分
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1230 Solved: ...
- 巧用代理设计模式(Proxy Design Pattern)改善前端图片加载体验
这篇文章介绍一种使用代理设计模式(Proxy Design Pattern)的方法来改善您的前端应用里图片加载的体验. 假设我们的应用里需要显示一张尺寸很大的图片,位于远端服务器.我们用一些前端框架的 ...
- MovieReview—Ghost in the Shell 2: Innocence(攻壳机动队2:无罪)
Doll killing event The movie was developed around a series of doll murders. Barthes and o ...
- C11 C语言文件的读写
目录 文件的打开和关闭 字符流读写文件 文件的打开和关闭 fopen( ) fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE ...
- vue入坑教程(二)在vue项目中如何导入element以及sass
在项目中导入element以及sass.stylus等方便开发的工具以及UI框架 (1)如何在vue项目中导入elementUI框架 elementUI是饿了么团队开发出来基于vue的前端UI框架,其 ...
- 解决Error"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系
今天写程序的时候调用到一个第三方的DLL文件,本机调试一切都正常,但是程序不是到服务器以后一直提示一个BUG:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系". ...
- Java中什么是匿名对象,空参构造方法输出创建了几个匿名对象,属性声明成static
package com.swift; //使用无参构造方法自动生成对象,序号不断自增 public class Person { private static int count; //如果在定义类时 ...
- iOS调用WebService接口
首先有几点说在前面 一般,在请求URL的后面带有WSDL字样的需要调用WebService URL样式例子:http://ip:port/navigable/webservice/loginSeric ...
- Linux下手动备份还原硬盘主引导记录MBR跟硬盘分区表DPT教程
Linux下手动备份还原硬盘主引导记录MBR跟硬盘分区表DPT教程 二 18 奶牛 Linux, Ubuntu, Windows 1,885 views查看评论 最近奶牛一直在折腾linux下的gru ...
- NOIP模拟赛 某种数列问题
众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe)去研究一 ...