您现在的位置是:首页 >技术教程 >SWLLOE网站首页技术教程

SWLLOE

masterphp 2024-06-17 10:22:20
简介SWLLOE

        前面讲过了workman,现在我们再了解另外一个swoole,首先我们要了解swoole是个啥?swoole其实是一个面向生产环境的 PHP 异步网络通信引擎,PHP + Swoole 作为网络通信框架可以使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。

        

特性:

1、 类似ORM的数据查询,提供SQL封装器,让MySQL的SQL与PHP的数组,会话,Cache无缝结合。

2、MVC分层结构,有效的程序结构分层,提高程序的可维护性和扩展性,实现低耦合,基于接口开发。

3、集成大量功能,比如方便的数据库操作,模板操作,缓存操作,系统配置,表单处理,分页,数据调用,字典操作,上传处理,内容编辑,调试等。

4、模板-数据反射系统,可以直接在模板中调用数据,提供很多标签,可以无需修改程序,只修改模板,即可实现网站各类更新维护工作。

如何运行swoole(简单的举个例子):

1.Windows版swoole下载地址:

https://link.zhihu.com/?target=https%3A//www.swoole.com/

2.配置全局变量:

Path:配置到项目下的bin目录地址

3.命令框查看是否配置成功:swoole-cli -v

4.PHP文件:(启动swoole服务)

<?php

//创建WebSocket Server对象,监听0.0.0.0:9502端口。

$ws = new SwooleWebSocketServer('0.0.0.0', 9502);

//监听WebSocket连接打开事件。

$ws->on('Open', function ($ws, $request) {

    echo "Message: {$request->fd} is in! ";

    $ws->push($request->fd, "hello, welcome!xw ");

});

//监听WebSocket消息事件。

$ws->on('Message', function ($ws, $frame) {

    echo "Message: {$frame->data} ";

    $ws->push($frame->fd, "server: {$frame->data}");

});

//监听WebSocket连接关闭事件。

$ws->on('Close', function ($ws, $fd) {

    echo "client-{$fd} is closed ";

});

$ws->start();

5.HTML文件

<!doctype html>

<html>

<head>

    <meta charset="utf-8">

    <title>swoole-cli demo</title>

</head>

<body>

    <script>

        var wsServer = 'ws://127.0.0.1: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>

</body>

</html>

6.开启服务:swoole-cli sw.php

7.浏览器访问html文件

到了这一步,环境就算搭建成功了

来个例子尝尝(广播: Redis 中订阅消息转发到 WebSocket 客户端):

//实例化

$server = new swoole_websocket_server("0.0.0.0", 9501);

//启动

$server->on('workerStart', function ($server, $workerId) {
    $client = new swoole_redis;
    $client->on('message', function (swoole_redis $client, $result) use ($server) {
        if ($result[0] == 'message') {
            foreach($server->connections as $fd) {
                $server->push($fd, $result[1]);
            }
        }
    });
    $client->connect('127.0.0.1', 6379, function (swoole_redis $client, $result) {
        $client->subscribe('msg_0');
    });
});

$server->on('open', function ($server, $request) {

});

$server->on('message', function (swoole_websocket_server $server, $frame) {
    $server->push($frame->fd, "hello");
});

$server->on('close', function ($serv, $fd) {

});

$server->start();

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。