声明:本篇文章没有任何攻击与嘲讽,只是觉得好奇,特此记录一下。另外说明一下Thinkphp的think-worker扩展,依旧是提供了"一些"方便。

一、Workerman

以下摘自Workerman官方网站(http://www.workerman.net/)首页介绍:

  • Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步Redis、异步Http、异步消息队列等众多高性能组件。

我之前用过基于workerman和phpsocket.io进行后台的消息推送,用户能够在界面看到后台推送的服务。

而phpsocket.io也是workerman作者基于socket.io开发的phpsocket开发利器(我觉的很好用,非常感谢作者)

之前使用workerman是没有结合框架的,在推送的时候,就是框架开发的后台调用API进行消息推送而已,因此两者是分开部署和运行的。

二、ThinkPHP 5

说实在的,我很久前学习和使用thinkphp框架的时候只有一个感觉,简单,方便的难以言喻。

因为我只要在Controller中写所有的逻辑就能够实现所有的业务功能,同时Model我想用就用不用就不用,一个表单内容提交的验证、写入、反馈都在一个函数中进行操作...

这也是ThinkPHP在5之前的版本的统一诟病,有利必有弊,在几乎没什么学习成本(我就看了看文档...)的情况下,菜鸟级别的入门是非常没问题的。

我是几乎不用到MVC...

相比较thinkphp5之前的版本,我更喜欢laravel,虽然YII、ZEND的MVC等都是非常强大和完善的,但laravel的编程的艺术性和逻辑性显然更加的适合我(我说的是适合,而不是最好)。

不过laravel这种框架的学习成本显然更高一下。

而ThinkPHP5 简直是一个质的飞越,不仅仅是支持composer、对于路由的支持更加的友好,同时API的开发也很友好(我之前尝试过使用thinkphp3.2.x进行API的开发,那个酸爽),其中包括我最兴奋的依赖注入...

因此虽然学习成本依旧增加,但是composer这么强大的工具同时支持各种NB的debug以及resource route等,使用起来也更加的方便。

以下摘自thinkphp5的官方手册:

  • 规范:遵循PSR-2、PSR-4规范,Composer及单元测试支持;
  • 严谨:异常严谨的错误检测和安全机制,详细的日志信息,为你的开发保驾护航;
  • 灵活:减少核心依赖,扩展更灵活、方便,支持命令行指令扩展;
  • API友好:出色的性能和REST支持、远程调试,更好的支持API开发;
  • 高效:惰性加载,及路由、配置和自动加载的缓存机制;
  • ORM:重构的数据库、模型及关联,MongoDb支持;

三、thinkphp5的think-worker扩展

因为thinkphp5能够使用composer进行库扩展,因此能够使用很多666的功能库。

当然也可以在扩展那里看到了think-worker的扩展

起初我很好奇,为什么手册中刻意介绍了workerman的扩展,不过在后面我看到了workerman中也刻意介绍了thinkphp这个框架而不是laravel或者是yii等框架,我可能明白了一些啥东西。

不过这不是什么坏的事情,好的东西就应该这样子,被大多数服务者所熟知,同时能够去使用。

最让我感到无语的是下面......

四、TP5的think-worker扩展究竟是什么

不过,thinkphp的这个文档中,写workerman的只有一页,因为workerman的手册以及demo做的很不错了(给原作者一个赞),没必要说那么多。

但是一页的内容,我看了之后很无语,文档地址:http://www.kancloud.cn/manual/thinkphp5/235128

就是介绍了如何使用composer去安装think-worker这个扩展,我下载了,然后跑了跑示例,都没问题,逻辑也没问题。

当我去看源代码的时候,就有些无奈了。

因为think-worker的扩展中其实只有一个php文件,如下图:

tp5.png

我当时很无奈,这一个文件要写多少东西呀...然后我打开了文件,发现这个文件只有不到60行(加上注释)而且只有一个construct构造函数,里面设置并且启动了一个workerman的Worker实例,然后指定了一大堆回调函数

tp5-2.png

熟悉Workerman开发的人应该都清楚,这个文件其实就是最基础的构建一个Worker而已。

当然,think-worker是需要workerman的依赖包的,因此composer.json中也require了workerman/workerman。

tp5-3.png

恕我直言,直接composer workerman/workerman,一样使用(手册下面的吃瓜群众好像一点都不知道think-worker是啥,有人竟然说写一个关于think-worker的单独文档,我只想说一个文件,怎么写一个单独的文档.哈哈哈哈哈哈哈)