其实超出浏览器,PHP仍有用武之地,Linux上PHP通过pcntl、posix、sysvshm、sysvmsg、libevent、 swoole、proctitle等PECL扩展支持,用纯PHP就可以编写不依赖Nginx/Apache的高性能Socket应用服务器(独立控制进程,以守护进程运行)
Phalcon 是开源、全功能栈、使用 C 扩展编写、针对高性能优化的PHP5框架http://myleftstudio.com/
- <?php
-
- class ControllerBase extends Phalcon\Mvc\Controller
- {
- protected function forward($uri)
- {
-
- $uriParts = explode('/', $uri);
- return $this->dispatcher->forward(
- array(
- 'controller' => $uriParts[0],
- 'action' => $uriParts[1]
- )
- );
- }
-
- protected function redirect($uri = '', $param = array())
- {
- $url = new Phalcon\Mvc\Url();
- $uri .= !empty($param) ? '/?' . http_build_query($param) : '';
- header("location:" . $url->get($uri));
- die;
- }
-
-
-
-
-
- public function getActionInfo()
- {
- $action = '/' . $this->dispatcher->getControllerName() . '/' . $this->dispatcher->getActionName();
- return $this->session->get($action);
- }
- }
Swoole PHP语言的异步、并行、高性能网络通信框架, 使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步,连接池,AsyncTask,消息队列, 毫秒定时器,异步文件读写,异步DNS查询。Swoole可以广泛应用于互联网、移动通信、企业软件、、网络游戏、物联网、车联网、智能家居等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。
下载源代码包后,在终端进入源码目录,执行下面的命令进行编译和安装
- cd swoole
- phpize
- ./configure
- make
- sudo make install
安装成功
编译安装成功后,修改php.ini加入
通过
php -m
或
phpinfo()
来查看是否成功加载了swoole,
如果没有,可能是
php.ini
的路径不对,可以使用
php -i |grep php.ini
来定位到
php.ini
的绝对路径。
TCP Server
- <?php
- $serv = new swoole_server("127.0.0.1", 9501);
- $serv->set(array(
- 'worker_num' => 8,
- 'daemonize' => true,
- ));
- $serv->on('connect', function ($serv, $fd){
- echo "Client:Connect.\n";
- });
- $serv->on('receive', function ($serv, $fd, $from_id, $data) {
- $serv->send($fd, 'Swoole: '.$data);
- $serv->close($fd);
- });
- $serv->on('close', function ($serv, $fd) {
- echo "Client: Close.\n";
- });
- $serv->start();
TCP Client
- <?php
- $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
-
- $client->on("connect", function($cli) {
- $cli->send("hello world\n");
- });
- $client->on("receive", function($cli, $data){
- echo "Received: ".$data."\n";
- });
- $client->on("error", function($cli){
- echo "Connect failed\n";
- });
- $client->on("close", function($cli){
- echo "Connection close\n";
- });
-
- $client->connect('127.0.0.1', 9501, 0.5);
php命令行开启监听
客户端访问
浏览器运行代码
- <?php
- $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
- $client->connect('127.0.0.1', 9503, 0.5);
- $client->send("hello world\n");
- $data = $client->recv(1024);
- echo $data;
- unset($client);
php+swoole目前的主要竞争对象是,两者的使用场景差不多。php在web领域的庞大使用量,如果你的现有项目也是用php构建的,用swoole写后端服务的时候可以复用大量的现有模块,这对企业开发的一致性是很重要的,理论上讲只需要维护一套基础就行了
李丹阳 https://github.com/LinkedDestiny/swoole-doc
phpstorm-swoole-ide-helper 代码自动补全