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 Worker\Controller;
use Think\Controller;
use Workerman\Worker;
class WorkerController{
protected $connection_uid;

/**
* 構造函數
* @access public
*/
public function __construct(){
$this->connection_uid=0;
$this->worker = new \Workerman\Worker('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\n";
}

/**
* 每個進程啟動
* @param $worker
*/
public function onWorkerStart($worker)
{

}

public function init(){

}

}

 

4.終端php命令運行workerman

 

 

5開啟socket擴展問題暫時沒遇到測試無需開啟也能運用workerman

;extension=php_sockets.dll //將php.ini前邊;去掉

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM