0
点赞
收藏
分享

微信扫一扫

从0到1搭建TP5.1+Swoole3.5.15环境


 

安装

 

首先按照​​Swoole官网​​说明安装swoole扩展,推荐新手可以直接使用

 

pecl install swoole

 

#会安装最新的稳定版(截至本文发布最新版本是4.0.3版本)

或者源码安装:

git clone https://github.com/swoole/swoole-src.git && \
cd swoole-src && \
phpize && \
./configure && \
make && sudo make install

 

常见问题

问题一:

安装时提示gcc版本过低,可以安装最新的gcc,我安装了4.8.2的

问题二:

这时候安装还是报错,提示gcc版本过低,这时候我注释了 swoole_config.h中关于gcc的检测

问题三:

安装完成后,重启php-fpm发现报错:/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

发现确实没有:GLIBCXX_3.4.18

ll  /usr/lib64/libstdc++.so.6

发现连接的确实是个老版本:/usr/lib64/libstdc++.so.6.0.13

找一下最新安装的:find / -name libstdc++.so.6*

我们发现,gcc安装时把/libstdc++.so.6.0.18 安装到了/usr/local/lib64/libstdc++.so.6.0.18下,但并没有改变libstdc++.so.6的链接指向。

那么我们手动来更新软连接

cp /usr/local/lib64/libstdc++.so.6.0.18 /usr/lib64

rm -rf /usr/lib64/libstdc++.so.6

ln -s /usr/lib64/libstdc++.so.6.0.18 /usr/lib64/libstdc++.so.6

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

发现有:GLIBCXX_3.4.18了 再次重新启动,完成

 

 

安装完成后,你可能需要在你的php.ini中添加:

extension=swoole.so

 

因为我是 php5.6的版本,最新的swoole需要php7以上,只能先按照1.x版本了

进入oneinstack安装目录执行下面命令,有当前php版本的swoole安装选项:

./addons.sh

 

再执行下面:

composer require topthink/think-swoole

配置文件:config/swoole_server.php

启动:

可以支持直接启动一个Swoole server(需要2.0.9+版本)

php think swoole:server

配置文件:config/swoole_server.php

 

示例

 

使用自定义的服务类

namespace app\push;

use think\swoole\Server;

class Swoole extends Server
{
protected $host = '127.0.0.1';
protected $port = 9502;
protected $option = [
'worker_num' => 4,
'daemonize' => true,
'backlog' => 128
];

public function onReceive($server, $fd, $from_id, $data)
{
$server->send($fd, 'Swoole: ' . $data);
}
}

 

在swoole_server.php中增加配置参数

'swoole_class' => 'app\push\Swoole', // 自定义服务类名称

 

定义该参数后,其它配置参数均不再有效。

 

客户端测试代码:

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-8">

<title>socket test</title>

<script>

function msg(txt){

var para=document.createElement("p");

var node=document.createTextNode(txt);

para.appendChild(node);

var element=document.getElementById("div");

element.appendChild(para);

}

// 打开一个 web socket

var ws = new WebSocket("ws://123.207.9.205:20000");

var div = document.getElementById("div");

ws.onopen = function()

{

// Web Socket 已连接上,使用 send() 方法发送数据

ws.send("send msg");

msg("send msg");

};

ws.onmessage = function (evt)

{

var received_msg = evt.data;

msg("rev "+received_msg);

};

ws.onclose = function()

{

// 关闭 websocket

msg("close ");

};

</script>

</head>

<body>

<div id="div">

</div>

</body>

</html>

 

 

参考文档:

1.​​https://www.kancloud.cn/manual/thinkphp5_1/675277​​

2.​​https://www.swoole.com/​​

 

 

举报

相关推荐

0 条评论