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前邊;去掉