php + swoole 进行简单的websocket使用

579 阅读1分钟

安装thinkphp6-安装这个可以直接看官网www.kancloud.cn/manual/thin…

php 7.2 + nginx

先安装composer。安装composer 也参照上面的路径地址

使用 shell 命令进入目录cd /www/wwwroot/

composer create-project topthink/think "项目名称" 即可安装thinkphp6

图片.png

这是安装好的目录。

图片.png

新建一个站点,然后指向一下这个目录

安装swoole。

php 需要先安装一下swoole扩展,具体我就不详细说明了。直接打开宝塔,直接安装扩展。安装后重启宝塔,可以直接运行命令 php -m 查看swoole扩展。

安装think-swooole

composer require topthink/think-swoole

配置

在目录"/www/wwwroot/swooletest/app/controller" 新建一个WebSocket.php

<?php

namespace app\controller;


class WebSocket {

    //基本配置信息
    protected $server;
    protected $port = 9608;
    protected $host = '0.0.0.0';


    public function __construct(){
          $this->server = new \Swoole\Websocket\Server($this->host, $this->port); //创建server对象

          $this->server->set(array(
            'worker_num' => 4,         //设置启动的worker进程数。最好是cpu核数
            'max_request' => 10000,    //设置每个worker进程的最大任务数。
            'daemonize' => 0,          //开启守护进程化
        ));
         //监听连接
        $this->server->on('open', function ($server, $req) {
            echo "连接打开: {$req->fd}" . PHP_EOL;
        });
        //监听信息
        $this->server->on('message', function ($server, $frame) {
            echo "客户端发送过来的消息: {$frame->data}". PHP_EOL;
            $this->server->push($frame->fd, "server: {$frame->data}"); //将信息推送给客户端用户
        });
        //监听连接关闭
        $this->server->on('close', function ($server, $fd) {
            echo "连接关闭: {$fd}". PHP_EOL;
        });
        //启动
        $this->server->start();
      }
  }
  
  $websocket = new WebSocket();

进入终端->项目根目录->运行命令 php app/controller/WebSocket.php

注意:记得打开服务器端口9608。宝塔也要放行端口,服务器安全组也要打开端口

前端在本地新建一个test.html文件

  <!DOCTYPE html>
    <html>

    <head>
        <meta charset="utf-8">
    </head>

    <body>
            <script>
                    var wsServer = 'ws://自己的域名:9608';
                    var websocket = new WebSocket(wsServer);
                    websocket.onopen = function (evt) {
                            console.log("成功连接服务器.");
                            //发送消息
                            websocket.send("您好,这是前端发出来的信息");
                    };

                    websocket.onclose = function (evt) {
                            console.log("连接服务器失败");
                    };

                    websocket.onmessage = function (evt) {
                            console.log('接收到服务器的信息: ' + evt.data);
                    };

                    websocket.onerror = function (evt, e) {
                            console.log('错误信息: ' + evt.data);
                    };
            </script>
    </body>
    <html>

图片.png

这样swoole websocket 的基础使用就可以了。