PHP快速应用Websoket

概述

Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架。本文将介绍如何使用Workerman来构建Websoket服务;


安装pcntl扩展

Workerman需要依赖pcntl扩展提供多线程、时钟等支持。pcntl扩展仅支持Linux和Mac平台。

pcntl扩展包含在php源码中,因此需要下载php源码,并从源码中生成pcntl扩展。

1>. 查看当前PHP版本(Mac自带PHP,注意要使用自主安装的PHP版本)

/Applications/XAMPP/xamppfiles/bin/php -v

2>. 下载对应版本的PHP源码

下载地址:https://www.php.net/releases/

3>. 生成pcntl扩展文件

## 解压PHP源码
tar -zxvf php-7.2.32.tar.gz;

## 进入源码中的ext/pcntl目录
cd php-7.2.32/ext/pcntl;

## 运行 phpize 命令
phpize;
## 运行 configure命令
./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config-7.2.32 --prefix=/Applications/XAMPP/xamppfiles/bin/php

## 运行 make 命令
make;

## 运行make install命令
sudo make install;

执行完以上命令后,会自动输出出pcntl.so扩展的位置,将其拖入 /Applications/XAMPP/xamppfiles/bin 文件夹;

7>. 打开 /Applications/XAMPP/xamppfiles/etc/php.ini  文件,配置 extension=pcntl.so 如下图:

8>. 重启Apache服务



构建Websoket服务端

use Workerman\Worker;
require_once __DIR__ . '../../../../vendor/autoload.php';

// Create a Websocket server
$ws_worker = new Worker('websocket://0.0.0.0:2346');

// 4 processes
$ws_worker->count = 4;

// Emitted when new connection come
$ws_worker->onConnect = function ($connection) {
    echo "New connection\n";
};

// Emitted when data received
$ws_worker->onMessage = function ($connection, $data) {
    // Send hello $data
    $connection->send('Hello ' . $data);
};

// Emitted when connection closed
$ws_worker->onClose = function ($connection) {
    echo "Connection closed\n";
};

// Run worker
Worker::runAll();



举报

© 著作权归作者所有


1