zoukankan      html  css  js  c++  java
  • 再堕噩梦,斩龙之旅

    本周继续做公会功能,有点乏味。

    这次主要是基于上周完成的框架,进行具体功能的协议对接。原本以为对接会很简单,毕竟之前的功能模块都已经写过单元测试了,虽然覆盖率不高,好歹还是能跑通happy path的。实际用的时候,才发现上周设计的api粒度太细了。隐约记得第一次做公会,也是犯了这个错误,api之间是十分正交,每一个完成的功能也很简单,方便测试。但是,用的时候需要调用多个api,因此需要处理多种错误情况,而没有goto语句,又导致需要将同一段错误处理代码多次复制粘贴。

    另一个比较头痛的问题,是目前的网络流是异步IO模型的,导致一段正常的逻辑需要断开多个函数来写,搞得我思维负担很大,有时候还需要在多个文件间来回切换,工作效率不高。异步回调这个无法解决了,除非引入coroutine的模型,可惜目前能力有限,无法向领导层推动这个事情。连游戏的自动测试,都无法推动到商业合作的阶段,真的有点失落。多个文件切换这个,最后用单元测试部分解决了,测好一个函数,对接一个,避免首尾应接不暇轮番报bug。

    为了方便开发,避免频繁更新协议,内部协议采用了JSON作为序列化的工具。因此,很多回调函数的参数都是mapping,类似python里的dict,漏参数在编译器不会报错,运行期会出现各种诡异问题。当年用python写公会的时候,没有想到解决办法,总觉得熬过去就好,反正有QC保证。现在学聪明了一点,写了个入口检查函数,既然不能在编译期检查,就在运行期加上吧,实际尝试后,发现效果拔群!虽然没有做类型检查,只是检查了key值是否有缺失,已经很有帮助了。

    另,最近同事在研习bt软件,用了一个从网上扒拉过来的SHA1算法,然后老是说这个算法改了他的全局变量,导致变量变成一个巨大无比的值。我检查了一下代码,SHA1里没用全局变量,不可能是别人的误改动。后询问得知,这个错误在Linux上不会发生,在mac上编译才会出现。前段时间,引擎从Freebsd迁移到CentOS上的时候,也出现了类似的错误。有可能是内存越界访问导致的,也有可能是某个unsigned的类型定义不一样,(不可能,溢出绕回的话不会变成大于max的值,如果可以大于max就不会溢出了)只是,网上找到的教程都是Unix向Linux移植,没有反方向的,比较囧

    ps:题图是经典的编译原理之龙书,勇士手握LALR文法之剑,持语法制导翻译之盾,向编译器复杂度之真龙发起殊死斗争,题中的斩龙指斩复杂度之龙

  • 相关阅读:
    Jenkins构建时间Poll Scm的设置(常用设置)
    jenkins对测试脚本的构建步骤
    jemeter排至数据库时报:Access denied for user 'root'@'localhost' (using password:YES) 解决方案
    接口测试总结
    linux gitlab-ctl reconfigure报错问题修复 502
    Linux Redis 开机启动
    CentOS7安装iptables防火墙
    linux mongodb开机启动(服务的方式)
    Linux服务器使用XShell上传下载文件
    推荐.Net、C# 逆向反编译四大工具利器
  • 原文地址:https://www.cnblogs.com/Lifehacker/p/thoughts_on_api_design.html
Copyright © 2011-2022 走看看