车栈

2017春节小结

目标

又是一年春节假期,而这个春节我制定了几个目标:

  • 完成100公里的跑步计划
  • 完成一个基于微信的活动平台
  • 完成WorkStation一期计划的80%

春节中的事情还是比较琐碎的,过节的常规事情,时不时还要处理下公司服务器的报警问题等。所以能完成以上几个事情是极好的。

总结

很快,假期到了尾声,也是对照目标做总结的时候了。

  • 目标一:「完成100公里的跑步计划」

这是我优先级最高的目标,长期的坐着不运动让人非常不舒服,长时间下来代码都不能愉快的写了。之前都是断断续续的跑着,最高纪录,也就是连续7天10公里,这次也算是个小挑战。锻炼这种东西,不能三天打渔两天晒网,否则根本没用。身体为先,我做到了每天坚持跑,即便是在只有1℃刮着4级风的日子。

2017后面的日子,就是要尽量做到一周至少五次,没理由不坚持!

  • 目标二:「完成一个基于微信的活动平台」

这个目标没什么好说的,属于必须完成的目标之一,否则也没法交差了😄。

  • 目标三:「完成WorkStation一期计划的80%」

这个小东西是我针对目前我司技术和需求部门沟通的不便以及容易发生纠纷等诸多问题而决定开发的一种协作平台吧,还比较简陋,也是我第一个SPA作品,之前喊太多的SPA,也写过其他小玩具,都没有这个成体系,也算是练习之作。这其中还有一个就是利用了微信企业号来实现消息的到达,让使用者快速了解每一个工作的变化状态,该项目看看在我司使用的情况,如果好的话,不排除以后会有开源的打算。

目标是完成80%,现在看来至少完成了本期功能的95%,赞。

过程中,有一个值得一提的插曲,在微信企业号推出后不久我写的一个包(chekun/weixin-biz), 当时也就是对着微信官方给的PHP类库,觉得它不够PSR规范而改写的,实际上我没有项目具体使用过,这次正好派上用场,修复若干问题,完善了下单元测试,麻溜的发布了v1.1.0版本。现在PHP7已经大势所趋,该包中使用了已经被PHP7.1标记为DEPRECATEDmcrypt扩展,目前暂时使用@已屏蔽错误提示。

这个package的具体使用方法,现在做个mark,近期会完善。

以上,三个目标皆算达成,其中,跑步和WorkStation还超额完成了,除此之外还做了一件值得一说的事情,那就是研究一个Laravel5.3项目在Swoole中运行。

节前一个我司产品老大米老朱分享了一篇SegmentFault的文章,使用Swoole加速Laravel(正式环境中),很早就知道SwooleWorkerman,除了公司用了Workerman来大大缓解了一处API的压力外,对Swoole还真没有过多的涉猎,所以此篇文章也只是看看作罢。

然而,临放假的晚上,一个系统突然要上线,并且最最重要的是,这个系统会发现金红包!!!当文章推送给用户后,那用户的「热情」真如滔滔江水啊,瞬间服务宕机,虽然采取了措施,保证了活动的完成,但也让我又想起了上面的说的文章,暗想找个时间要研究一下,能提升点性能必定是不错的!

正如文章中提到的garveen/laravoole,目前Laravel和Swoole的结合,只有这个完成度比较好,使用起来也比较优雅,符合Laravel的风格,遇到的小坑有三处:

  • Response问题

这个基本上都是我代码不规范引起的,比如我要导出Excel文件(phpexcel类库),我都是这么做的:

...
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="excel.xls"');
$writer->save('php://output');

这样在纯php中都是没有问题的,但是在swoole肯定是不行的,其实只要按照Laravel的标准Response做法就可以了,因为laravoole会将这里的Laravel的Response转换成Swoole-HttpServer的Response,所以改为Laravel的标准写法即可。

return response(file_get_contents('excel-file'))
           ->header('Content-Type', 'application/vnd.ms-excel')
           ->header('Content-Disposition',  'attachment;filename="excel.xls"')
           ->header('Cache-Control', 'max-age=0');
  • JSON Input问题

Laravel本身的Request对于json格式的请求也可以通过 $request->get('xxx')获取到,到了这里就需要显性指定了,即:

$request->json()->get('xxx');
  • Easywechat问题

    • 将 oauth 使用的 request 对象设置为 Laravel 的 Request 对象
    • overtrue/wechat/src/Support/Url.php 中的current方法使用 Laravel 的 Request 方法做处理
    • 回调的部分也有一些问题,没有去深入研究,暂时将这部分请求沿用php-fpm处理

PS:laravoole 同时也支持以 Workerman 的方式运行。

愿景

  • 跑步,跑步,跑步
  • 读书,读书,读书
  • 赚钱,赚钱,赚钱

2017 大家一起加油吧!