
作者:eechen
链接:https://www.zhihu.com/question/67180780/answer/250091821
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
用PHP+Swoole开发游戏逻辑服务器。
用PHP-FPM开发游戏运营管理后台。
Swoole - 面向生产环境的 PHP 异步网络通信引擎
使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、【网络游戏】、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。
Swoole中,PHP逻辑跑在worker和task多进程架构下,所以PHP里的逻辑根本不用担心锁的问题,而在多进程中共享数据可能用到的Redis、APCu扩展或者Swoole内部提供的Swoole Table,各个服务也都自带了锁机制,根本不需要开发者关心。一句话,用PHP+Swoole,实在是比C++/Java甚至Node.js之流简单得多。就说Node.js吧,HTTP下拿个上传文件还得自行实现,而Swoole呢?直接一个 $req->files['file'] 搞定,跟原来的 $_FILES['file'] 基本一模一样,提供的定时器函数跟JS的一样简单易用,Swoole哲学依旧是PHP的大道至简。用过Swoole就知道,开发者最应该注意不是什么锁,而是Swoole里PHP逻辑是内存常驻的,这是跟PHP-FPM的根本区别,所以全局变量/静态变量是跨请求的,用静态变量实现MySQL/Redis单例时,尤其要注意每次使用时都应该检测这个静态变量对应的资源是否仍然可用,如果不可用则进行重连操作。
Swoole全部功能都使用C实现,加上PHP7的性能加成,开发者用PHP开发出来的实时通信服务(即时聊天/消息推送/游戏服务等)性能绝对有保证。如果PHP7+Swoole仍然不能满足你的性能需求,那么恭喜你,你可能正在做的是下一个王者荣耀。当然了,开发者也完全可以用Swoole开发传统PHP开发的Web网站,性能(内存常驻)和异步非阻塞是最明显的收益。
Swoole是PHP社区里的现象级产品,贡献甚至不逊于鸟哥参与开发的PHP7。每一个PHP开发者都应该考虑学习Swoole+Linux来武装自己。