workerman 做即时通讯 做推送 在线人数解决强退问题 也可做聊天系统

1 下载workerman解压在项目Library下面每个文件加.class 除Controller.php外   改名字为Workerman

2 config添加 命名空间自动加载

'AUTOLOAD_NAMESPACE' => array(
'Workerman' => ROOT_PATH1 . 'Worker',//根据自己的存放位置修改
),

3 新建Worker模块 入口文件worker.php  WorkerController.class.php

worker.php

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

// 应用入口文件

// 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');

// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',True);
define('BIND_MODULE', 'Worker');
define("SITE_PATH",__DIR__);
// $_GET['m'] = "Home";
// 定义应用目录
define('APP_PATH','./App/');

define('BIND_CONTROLLER', 'Worker');//限制终端才能访问该文件
//define('BIND_ACTION', 'Start');
//echo time();exit;
// 引入ThinkPHP入口文件
require './ThinkPHP/ThinkPHP.php';

// 亲^_^ 后面不需要任何代码了 就是如此简单

WorkerController.class.php

<?php
namespace WorkerController;
use ThinkController;
use WorkermanWorker;
class WorkerController{
protected $connection_uid;

/**
* 构造函数
* @access public
*/
public function __construct(){
$this->connection_uid=0;
$this->worker = new WorkermanWorker('websocket://0.0.0.0:8686');// 实例化 Websocket 服务
$this->worker->count = 4;// 设置进程数
// $this->init();//初始化
// 设置回调
foreach (['onWorkerStart', 'onConnect', 'onMessage', 'onClose', 'onError', 'onBufferFull', 'onBufferDrain', 'onWorkerStop', 'onWorkerReload'] as $event) {
if (method_exists($this, $event)) {
$this->worker->$event = [$this, $event];
}
}
// Run worker
Worker::runAll();
}

/**
* 收到信息
* @param $connection
* @param $data
*/
public function onMessage($connection, $data)
{
$data_id = json_decode($data, TRUE);
$data_id['id'] = $this->connection_uid; //用户子进程id
$data_id['oncline'] = count($this->worker->connections); //在线人数
$data_id['time'] = time();

foreach ($this->worker->connections as $conn) {
$data_id['conn'] = $conn;
$data = json_encode($data_id);
$conn->send($data);
}
}

/**
* 当连接建立时触发的回调函数
* @param $connection
*/
public function onConnect($connection)
{
$this->connection_uid += 1;
$data = '{"status":200,"msg":"建立连接","uid":'.$this->connection_uid.'}';
foreach ($this->worker->connections as $conn) {
$conn->send($data);
}
}


/**
* 当连接断开时触发的回调函数
* @param $connection
*/
public function onClose($connection)
{
$connection->send('断开连接');
}

/**
* 当客户端的连接上发生错误时触发
* @param $connection
* @param $code
* @param $msg
*/
public function onError($connection, $code, $msg)
{
echo "error $code $msg ";
}

/**
* 每个进程启动
* @param $worker
*/
public function onWorkerStart($worker)
{

}

public function init(){

}

}

4.终端php命令运行workerman

5开启socket扩展问题暂时没遇到测试无需开启也能运用workerman

;extension=php_sockets.dll //将php.ini前边;去掉

原文地址:https://www.cnblogs.com/zhang-bin/p/10137742.html