2019独角兽企业重金招聘Python工程师标准>>>

MT4 帐号验证通常需要花费 2-60 秒的时间。对于壹個有多个服务器名称和符号前缀的投资者而言,前端代码需要使用多线程技术来并行的调用帐号验证 API 以便于尝试所有的服务器名称与符号前缀的组合。

我们将在登录页面提供壹個进度条,这样当用户等待登录时可以提供可视化的反馈。

Richard 为前端开发人员提供的设计参考:

帐号验证 API 如下 (参见 US1328 中关于后端开发人员的部分来增强这个 API):

/*** @return 如果投资者帐号验证有效返回true,否则返回false* @throws 如果在验证过程中发生错误则抛出异常*/
bool verifyBrokerCredential (Long brokerId, String username, String password, String mt4ServerName, String mt4SymbolSuffix)
throws Exception;

当波士顿团队增强这个 API 时,上海团队需要提供壹個假的 API 实现。假的实现将随机在 2-60秒的时间内返回。我们将使用壹个 "magic" 参数值去表示假的实现返回的是 true, false,或者抛出壹個异常。

前端开发人员需要实现如下 API 以便使用多线程来调用假的实现。

CredentialVerificationStatus verifyBrokerCredential(Long brokerId, String username, String password,
List<String> mt4ServerNames, List<String> mt4SymbolSuffixes);class CredentialVerificationStatus {public static enum CredentialStatus {VALID, INVALID, UNKNOWN}Long brokerId;String username;String password;String serverName;String symbolSuffix;CredentialStatus status; //VALID, INVALID, UNKNOWNjava.util.List<Exception> exceptions;
}

比如说壹個投资者有两個服务器名称(prod1.fxdd.com 和 prod2.fxdd.com)和两個符号前缀(A 和 B)。上述方法应该生成四個线程,针对服务器名称与符号前缀的四种排列来调用后端 API :

1. prod1.fxdd.com, A
2. prod1.fxdd.com, B
3. prod2.fxdd.com, A
4. prod2.fxdd.com, B

方法应该:

1. 壹旦某個线程返回 true,则方法返回 VALID ;在这种情况下不要等待所有线程返回。
2. 如果所有线程返回 false 则方法应该返回 INVALID 。
3. 如果没有线程返回 true 并且至少壹个线程抛出异常则方法返回 UNKNOWN 。

我们应该可以使用 CountDownLatch 来实现上述行为。
如果进度条可以显示基于返回的线程数显示进度就更好了。在上述例子中,如果壹個线程返回了,进度条应该显示 25% 完成。如果两個线程返回,则进度条应该显示 50% 完成。以此类推。

先连接 VPN,然后在命令行上使用如下命令来连接 sandbox mysql 数据库实例:

C:\>mysql -usandbox -psandbox -hdb1-sandbox.qa.currensee.com forexpert_sandbox
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4192259 to server version: 5.5.15-logType 'help;' or '\h' for help. Type '\c' to clear the buffer.

然后查询数据库表 BrokerCredential 得到所有可能的 credentialStatus 结果:

mysql> select group_concat(distinct credentialStatus) from BrokerCredential;
+-----------------------------------------------+
| group_concat(distinct credentialStatus)       |
+-----------------------------------------------+
| SUSPENDED,INVALID,VERIFIED,UNVERIFIED,PENDING |
+-----------------------------------------------+
1 row in set (0.48 sec)

如何在测试环境上测试模拟的方法?

1. 首先查询数据库表 Broker 以便得到所有的第三方交易系统信息,这里只查询前10条以便说明,查询语句如下:

mysql> select id, name, groupName from Broker limit 10;
+----+---------------+---------------+
| id | name          | groupName     |
+----+---------------+---------------+
|  1 | FXCM          | FXCM          |
|  3 | Forex.com-MT4 | Forex.com-MT4 |
|  4 | IBFX          | IBFX          |
|  5 | FXDD          | FXDD          |
|  6 | MBTrading     | MBTrading     |
| 12 | ODL-MT4       | ODL-MT4       |
|  8 | i-Trade       | i-Trade       |
|  9 | TradeView     | TradeView     |
| 10 | PFGBEST       | PFGBEST       |
| 69 | ILQ           | ILQ           |
+----+---------------+---------------+
10 rows in set (0.51 sec)

2. 为 FXDD (brokerId = 5) 创建服务器名称和符号前缀,让投资者帐户在 FXDD 上的验证总是失败。

insert into BrokerAttribute (version, broker_id, name, value) values (0, 5, 'BrokerServerNames', 'fxdd-server1, fxdd-server2');
insert into BrokerAttribute (version, broker_id, name, value) values (0, 5, 'BrokerSymbolSuffix', 'X, Y');

3. 为 ILQ (brokerId = 69) 创建服务器名称和符号前缀,让投资者帐户在 ILQ 上的验证总是成功。

insert into BrokerAttribute (version, broker_id, name, value) values (0, 69, 'BrokerServerNames', 'ilq-server1, ilq-server2, ilq-server3');
insert into BrokerAttribute (version, broker_id, name, value) values (0, 69, 'BrokerSymbolSuffix', 'M, N');

魔法参数会返回 true 的投资者帐户验证是 ('ilq-server1', 'M')。

4. 为 ODL-MT4 (brokerId = 12) 创建服务器名称和符号前缀,让投资者帐户在 ODL-MT4 上的验证总是抛出异常。

insert into BrokerAttribute (version, broker_id, name, value) values (0, 12, 'BrokerServerNames', 'ODL-MT4-server1, ODL-MT4-server2, ODL-MT4-server3');
insert into BrokerAttribute (version, broker_id, name, value) values (0, 12, 'BrokerSymbolSuffix', 'A, B');

('ODL-MT4-server2','B') 抛出异常,其它的返回失败信息。

5. FXCM (brokerId = 1) 没有服务器名称和符号前缀,验证通过。

6. 所有其它的投资者没有服务器名称和符号前缀,验证失败。

转载于:https://my.oschina.net/bairrfhoinn/blog/83491

用户注册增强:用户登录时显示进度条相关推荐

  1. 命令行中复制移动时显示进度条

    from:here "世间最痛苦的事莫过于等待",相信使用过Shell中cp或者mv命令操作大文件的朋友们都有这种感慨.要是能显示复制或者移动的进度,把无尽的等待变成有限的期待,那 ...

  2. php excel 进度,在php中生成Excel文件时显示进度条

    我有一个 HTML表单,当您通过单击按钮提交表单时,应用程序使用 PHPExcel生成Excel文件.一切正常,但是当excel文件很大时,等待时间很长.我想添加进度条或显示完整百分比值.我的问题是我 ...

  3. android加载刷新进度条,android – 在Activity加载时显示进度条

    我有一个ListActivity,它基于列表选择启动另一个Activity.第二个Activity需要从互联网上加载一些相当数据的数据,因此在用户点击一个项目和Activity显示之间有一个明显的延迟 ...

  4. java 下载文件 进度条_java – 从服务器下载文件时显示进度条

    如果我很了解你,你想显示一个进度条,直到你的服务器准备好发送一个文件,而不是显示蜜蜂下载的文件的进度. 如果是这样,你正在处理艰难的练习.一个可靠的进度条需要知道(相当准确)你在做什么以及需要多长时间 ...

  5. 文件上传(显示进度条、上传速度)

    XMLHttpRequest对象 使用XMLHttpRequest对象实现数据交互. //创建XMLHttpRequest对象 let xhr = new XMLHttpRequest(); //le ...

  6. pqdm 是 tqdm 和 concurrent.futures 的 wrapper | 一个小而美的 Python 并行计算库 | 实现多进程显示进度条的优雅方案

    文章目录 一.简介 二.特点 三.代码实践 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一.简介 pqdm 是 tqdm 和 concurrent future ...

  7. java开发进度条怎么监控,上传文件时监控读取进度,显示进度条

    我们在使用异步事件处理时还能顺便获得一项优势,那就是能够监控文件的读取进度:这对于读取大文件.查找错误和预测读取完成时间非常实用. onloadstart 和 onprogress 事件可用于监控读取 ...

  8. 异步上传文件显示进度条

    异步上传文件显示进度条 原文地址:异步上传文件显示进度条 问题 我们在写网站时难免会遇到需要上传文件的场景,但当上传大文件时比如5个G的文件直接用表单直接提交文件会出现页面卡顿.未响应等影响用户体验的 ...

  9. VC下载文件 + 显示进度条

    在codeproject里找了许久,发现这样一个VC下载文件并显示进度条的源码,于是添加了些中文注释: 1.下载线程函数: UINT DownloadFile(LPVOID pParam) { CWn ...

最新文章

  1. PCA(2):PCA算法实现的两种方式
  2. 从大数据到安全大数据分析
  3. PHP设置二维码中间为logo
  4. 2015美国数学建模a代码c语言,1985~2015美国大学生数学建模竞赛题目集锦.docx
  5. 期货大赛项目|九,fileinput插件的应用
  6. 【IOS】获取wifi名称 (即SSID)
  7. c语言怎么把字符型数字变成整型数字,怎么把数字变成字符型
  8. Python爬虫项目---从wiley网站批量下载文章
  9. Altium的原理图主题修改为Orcad的默认样式(Altium原理图样式更改)
  10. 精益 -- 二十一世纪标准的全球生产体系初探和思考
  11. 自然语言处理之中文文本分析(jieba分词、词袋doc2bow、TFIDF文本挖掘)
  12. 云南大理旅游时间推荐
  13. ZZULIOJ:1134: 字符串转换
  14. A Game of Thrones(39)
  15. 开源=安全?RVN盗币事件复盘
  16. 【打卡】21天学习挑战赛—RK3399平台开发入门到精通-day9
  17. PythonThinking_FOR、IF以及while
  18. K8S原理剖析:Pod、工作负载与服务
  19. 腾讯与NBA锁定五年独家合作
  20. 全球及中国粉煤灰PFA行业行业发展动态与前景趋势预测报告2022-2028年

热门文章

  1. JRE和JDK的解释及区别
  2. 将分布式项目sck-demo部署到本地kubernetes,以及实现版本升级和回滚
  3. 我的世界网易服务器修改世界,我的世界:1.16改变两个版本更新频率?网易版异常乱封大批账号?...
  4. CF924C Riverside Curio
  5. java 3 3数字拼图,基于Vue.js实现数字拼图游戏
  6. JAVA中的多线程与运动仿真(1)——用JAVA来放一场烟花
  7. 考研秘籍——考研流程及初试备战
  8. 探索个人碳账户应用,实践绿色金融创新
  9. 项目部署的常用进程管理命令
  10. UNI-APP之微信小程序转H5