Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。

本教程以WebSocket为例。


一、安装Swoole4

宝塔面板为例,在php设置中直接可以安装

image


二、测试程序脚本

1、在web目录中新建文件/api/sms.php (注意文件名大小写格式)

<?php

/**
 * sms服务端入口文件
 */


define('IS_API', basename(__FILE__, '.php')); // 项目标识
define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); // 该文件的名称
require(dirname(dirname(__FILE__)).'/index.php'); // 引入主文件


2、再到xunruicms的主程序目录建立业务处理文件 /dayrui/My/Api/Sms.php (注意文件名大小写格式)

//创建websocket服务器对象,监听0.0.0.0:9502端口
$ws = new Swoole\WebSocket\Server("0.0.0.0", 9502);

//监听WebSocket连接打开事件
$ws->on('open', function ($ws, $request) {
    var_dump($request->fd, $request->get, $request->server);
    $ws->push($request->fd, "hello, welcome\n");
});

//监听WebSocket消息事件
$ws->on('message', function ($ws, $frame) {
    echo "Message: {$frame->data}\n";
    $ws->push($frame->fd, "server: {$frame->data}");
});

//监听WebSocket连接关闭事件
$ws->on('close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
});

$ws->start();

这个是swoole官方的例子


3、使用命令行工具执行文件:

php 网站根目录/api/sms.php

image

如果这种样子表服务已经正常启动了


4、安全组放行端口号:9502


5、宝塔防火墙放行端口号:9502


6、使用swoole官方例子在任意html文件中加上客户端测试代码

<script>
    var wsServer = 'ws://网站域名或ip地址:9502';
    var websocket = new WebSocket(wsServer);
    websocket.onopen = function (evt) {
        console.log("Connected to WebSocket server.");
    };

    websocket.onclose = function (evt) {
        console.log("Disconnected");
    };

    websocket.onmessage = function (evt) {
        console.log('Retrieved data from server: ' + evt.data);
    };

    websocket.onerror = function (evt, e) {
        console.log('Error occured: ' + evt.data);
    };
</script>


文档最后更新时间:2020-04-15 17:23:14
我来修改此文档(1) 不会操作怎么办?