thinkphp3.2整合workerman 多入口模式(windows)

第一步:将Workerman复制到ThinkPHP项目中的适当位置(我是放到根目录,与ThinkPHP平级)

第二步:将Workerman中的所有文件(除/Workerman/Lib/Constants.php外)后缀改为.class.php,如:Worker.php改为Worker.class.php

第三步:配置ThinkPHP的命名空间自动加载。在ThinkPHP的配置文件中加入

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

第四步:在ThinkPHP项目中新增Worker模块和Worker控制器,也可以根据自己的喜好来命名

namespace Worker\Controller;
use Workerman\Worker;

class Worker {
    public function Start() {
        $worker = new Worker(‘text://0.0.0.0:1234‘); //实例化Worker,并设置协议、IP和端口
        $worker->count = 4;
        $worker->onMessage = array($this, ‘onMessage‘);
        //worker的其它回调方法可以参考onMessage
        Worker::runAll();
    }

    public function onMessage($connection, $data) {
        $connection->send(‘something...‘);
    }
}

在onMessage方法中,还可以根据自定义的协议和内容格式,通过ThinkPHP的A()方法来调用相关的模块、控制器,就可以做到跟普通的ThinkPHP项目相同的开发模式了,如:

$class = A($data[‘m‘] . ‘/‘ . $data[‘c‘]);
if (!$class) {
    $connection->send(‘Module or Controller not found.‘);
} else {
    $action = $data[‘a‘];
    unset($data[‘m‘], $data[‘c‘], $data[‘a‘]);
    try {
        call_user_func_array(array($class, $action), $data);
    } catch (Exception $ex) {
        throw $ex;
    }
}

第五步:ThinkPHP入口绑定。入口绑定是ThinkPHP3.2.1+给出的方法,之前的版本也有相应的方法,网上是可以查得到的。

新建入口文件worker.php

define(‘APP_PATH‘,‘./Application/‘);define(‘BIND_MODULE‘, ‘Worker‘);
define(‘BIND_CONTROLLER‘, ‘Worker‘);
define(‘BIND_ACTION‘, ‘Start‘)

//ThinkPHP的其他设定

require ‘./ThinkPHP/ThinkPHP.php‘;

最后:通过bat文件运行worker.php文件(Windows环境直接运行会报错)

原文地址:https://www.cnblogs.com/limonyun/p/8878710.html

时间: 2024-11-05 15:18:04

thinkphp3.2整合workerman 多入口模式(windows)的相关文章

简单介绍php编程单一入口和多入口模式(案例)

php单一入口模式可谓是现在一种比较流行的大型web应用开发模式,比如当前比较流行的一些php开发框架,zend,thinkphp,qeephp,还有cakephp 等他们都是采用的单一入口模式的.本文将就什么是单一入口模式,单一入口模式有哪些优点以缺点做一下研究. 什么是单一入口? 在解释什么是单一入口之前,先说说与之对应的多入口.多入口即通过访问不同的 php 文件运行对应的功能.比如刚开始学习 php 的时候,我们做一个项目通常都会如下这样做: index.php - 网站首页 list.

对web应用中单一入口模式的理解及php实现

在我们web应用的开发中,经常会听见或看见单一入口模式,在我开始学习tp框架的时候也不理解为什么要运用一个单一入口模式,只是会使用,最近自己在搞一个小东西的时候才明白为什么在web开发中要运用单一入口模式. 那么,什么叫单一入口模式呢?单一入口模式官方版就是用一个文件处理所有的请求.其实,说通俗一点就是,当我们访问一个网站,都是在地址栏中通过http的请求访问,在http的请求中,我们需要标明我们要访问什么页面,什么内容,单一入口模式就是将你所有的请求都通过这一个文件转发出去,就好比a想找b,找

企业应用架构的基本模式之入口模式

本篇介绍企业应用架构的基本模式之一入口(Gateway)模式. 入口(Gateway) 入口是一个封装外部系统或资源访问的对象.带来系统上的简单性,可测试性,使得依赖资源的替换变得更加容易. 背景 当访问外部资源时,通常要获得它们的API,但这些API可能具有天然的复杂性,因为它们必须考虑到资源自身的特性.任何要理解一个资源就必须首先通晓基API——无论是对关系数据库的JDBC,还是针对XML的W3C和JDOM,皆是如此.这使得软件的可读性差,修改变得困难,例如将来的某时将关系数据库的一些数据转

Kafuka面试(整合Kafka两种模式区别)

整合Kafka两种模式说明 ★面试题:Receiver & Direct 开发中我们经常会利用SparkStreaming实时地读取kafka中的数据然后进行处理,在spark1.3版本后,kafkaUtils里面提供了两种创建DStream的方法: 1.Receiver接收方式: KafkaUtils.createDstream(开发中不用,了解即可,但是面试可能会问) Receiver作为常驻的Task运行在Executor等待数据,但是一个Receiver效率低,需要开启多个,再手动合并数

别踩白块儿之禅模式 windows程序实现

代码如下 #include <Windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain( //程序入口,WINAPI是一种函数调用约定,用于表明如何生成在堆栈中放置调用参数的机器代码 HINSTANCE hInstance //实例句柄,标识该程序 , HINSTANCE hPreInstance //16位中用于标识该程序前一实例,32位中不再采用,参数为NULL , LPSTR s

TP5整合 WorkerMan 以及 GatewayWorker

TP5整合GatewayWorker ?Windows版安装 a)使用composer create-project topthink/think testTG,来安装thinkphp5. b)进入thinkphp5的目录,此处为testTG,使用composer require workerman/gateway-worker-for-win 安装Windows版本的gateway. c)去官网下载Windows版的gateway-worker,里面有demo.http://www.worke

Thinkphp3.2整合微信支付

业务场景: 用户在网页上选定商品,然后生成QRcode,用户扫后付款返回信息给server. 用到的支付模式: NATIVE模式二 服务端信息: PHP,Thinkphp3.2框架 1.文件整合 首先把官方提供的demo下下来: 下下来以后 把demo里面的WxPayPubHelper整个文件夹放到Thinkphp项目里面Vendor文件夹中,放置之后项目就可以通过Vendor("WxPayPubHelper.文件名")来调用里面的php文件(.php不需要加) 2.代码整合 模式二主

ThinkPHP3.2.2中开启REWRITE模式

1. 在项目配置文件(\Application\Common\Conf\config.php)中配置URL模式 1 <?php 2 return array( 3 //URL模式 4 'URL_MODEL' => 2,5 'URL_ROUTER_ON'   =>  true,//默认fllse,   // 是否开启URL路由 6 ); 添加.htaccess文件  内容如下: <IfModule mod_rewrite.c>                       Rew

thinkphp3.2整合phpexcel

由于thinkphp3.2使用命名空间,而 PHPExcel没有使用,那么两者整合的最重要问题就是如何导入的问题. 一.PHPExcel.php和PHPExcel文件夹都放在ThinkPHP/Library/Org/Util下,PHPExcel.php修改为PHPExcel.class.php. 二. public function index(){ //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入 import("Org.Util.PHPExcel&quo