漫谈登录桩(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次工作了,但每次心里都和忐忑). 写写代 ...
随机推荐
- Codeforces Round #321 (Div. 2) C Kefa and Park(深搜)
dfs一遍,维护当前连续遇到的喵的数量,然后剪枝,每个统计孩子数量判断是不是叶子结点. #include<bits/stdc++.h> using namespace std; ; int ...
- Android(java)学习笔记128:xml文件生成
1.xml文件: 用元素描述数据,跨平台. 2.利用传统的方式创建xml文件,下面是一个案例: 设计思路:建立一个学生管理系统,创建xml文件保存学生信息: (1)首先是布局文件activity_ma ...
- [web开发] 利用微信小程序开发上海大学失物招领平台
我从开始学微信小程序到最后完全写完这个小程序耗时四天,可以说开发难度非常之低,门槛也非常低,之前从来没接触过微信小程序,重新写下开发记录. 先放图: 1.前端开发 前端我用到了iview的ui框架,因 ...
- Dojo的declare接口
declare(classname,[],{}) declare的第一个参数是可选的,代表类的名称 declare的第二个参数代表类的继承关系,比如继承哪一个父类,可以看到:第二个参数是一个数组,所以 ...
- Keras预训练模型下载后保存路径
https://blog.csdn.net/xiaohuihui1994/article/details/83340080
- CNCF 有哪些具体的项目内容?
前言:CNCF(Cloud Native Computing Foundation)于 2015 年 7 月成立,隶属于 Linux 基金会,初衷围绕“云原生”服务云计算,致力于维护和集成开源技术,支 ...
- rest_framework之status HTTP状态码
Django Rest Framework有一个status.py的文件 通常在我们Django视图(views)中,HTTP状态码使用的是纯数字,像400,404,200,304等,并不是那么很好理 ...
- mysqlfailover高可用与proxysql读写分离配置
proxysql官方推荐两种高可用方案: 1.MHA+proxysql 2.mysqlrpladmin+proxysql MySQLfailover工具包含在mysqlrpladmin工具中,所以两者 ...
- 16Shell脚本—计划任务服务程序
计划任务服务程序 尽管我们现在已近有了功能彪悍的脚本程序来执行一些批处理工作,但是,如果仍然需要每天凌晨两点敲击键盘回车键来执行这个脚本程序,这简直太痛苦了.为此,我们需要学习如何设置服务器的计划任务 ...
- VMware安装Ubuntu配置NAT模式下静态IP,解决访问外网问题
安装好VMware后,打开网络连接可以看到有VMware Network Adapter VMnet1和VMware Network Adapter VMnet8两个网络适配器,VMnet1是针对桥接 ...