当前位置:首页 > php > 正文内容

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

phpmianshi3年前 (2018-12-02)php360


安装


首先按照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>


版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

php中opcache注意事项以及调优

背景从 PHP5.5 开始,Opcache 扩展是核心的一部分,增加了对 PHP 脚本的字节码缓存的支持。对于动态语言(例如 PHP ),字节码缓存可以显著的提高性能,因为它可以确保脚本仅被编译一次。...

php中function_exists的一个坑

背景php有一个检查函数是否存在的函数function_exists,有时我们需要用到它,防止函数重复定义示例先看一段代码,代码可以正常执行test();function test(){  ...

PHP7的垃圾回收机制

PHP7的垃圾回收机制

垃圾回收机制垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。 自动回收内存的过程叫垃圾收集。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻...

Laravel神奇的服务容器

IoC 容器, laravel 的核心Laravel 的核心就是一个 IoC 容器,根据文档,称其为“服务容器”通过举例来让读者去理解什么是 IoC(控制反转) 和&nb...

php-fpm backlog参数优化

php-fpm backlog参数优化

一、问题分析       1、分析php-fpm.slow.log发现没有执行慢的地方,然后把目光放到了nginx 与php建立连接的阶段上,使用tcpdump...

记一次tp3.2.3因fetch导致的漏洞处理过程

记一次tp3.2.3因fetch导致的漏洞处理过程

问题描述:最近发现百度收录大幅度下降,并出现大量5xx错误,有些收录页面直接跳转到其他网站,如下图:问题追查1.根据以往经验首先怀疑网站被植入或者挂马      &nbs...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。