视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
TP5 如何整合 WorkerMan 以及 GatewayWorker
2020-11-03 18:24:08 责编:小采
文档
下面由workerman教程栏目给大家介绍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.workerman.net/download

d)将下载的压缩包解压,将Applications/Yourapp中的文件全部复制到thinkphp5目录application里面的任意文件夹,这里取名为push。

e)将解压后的文件夹中的start_for_win.bat复制到thinkphp5的根目录,即与application同级的目录。

f)右键start_for_win.bat,点编辑,将里面的目录改成自己的目录,这里改为

php applicationpushstart_register.php applicationpushstart_gateway.php applicationpushstart_businessworker.php
Pause

g)保存退出。双击运行。

Linux版安装

a)使用composer create-project topthink/think testTG,来安装thinkphp5.

b)进入thinkphp5的目录,此处为testTG,使用composer require workerman/gateway-worker 安装Linux版本的gateway。

c)去官网下载Linux版的gateway-worker,里面有demo。http://www.workerman.net/download

d)将下载的压缩包解压,将Applications/Yourapp中的文件全部复制到thinkphp5目录application里面的任意文件夹,这里取名为push。

e)将解压后的文件夹中的start.php复制到thinkphp5的根目录,即与application同级的目录。

f)将start.php文件中最后部分forearch循环括号内的路径改为自己的正确路径。

在命令行php start.php start 启动。

TP5整合WrokerMan

Windows版安装

a)使用composer create-project topthink/think testTW,来安装thinkphp5.

b)进入thinkphp5根目录,即testTW。先使用composer require topthink/think-worker,

再使用composer require workerman/workerman-for-win,来安装workerman。安装成功之后删除vendorworkermanworkerman。

c)在thinkphp5根目录(即与application同级目录)创建server.php,编辑一下内容。

<?php
efine('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE','push/Worker');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';

d)创建workerman的controller,命名为Worker.php。在application/push/controller,目录不存在自行创建。添加以下内容:

protected $socket = 'websocket://127.0.0.1:2346'其中127.0.0.1为socket服务器所在的ip地址。此处监听本机的2346端口。

<?php
namespace apppushcontroller;
use thinkworkerServer;
class Worker extends Server
{
 protected $socket = 'websocket://127.0.0.1:2346';
 /**
 * 收到信息
 * @param $connection
 * @param $data
 */
 public function onMessage($connection, $data)
 {
 $connection->send('我收到你的信息了');
 }
 /**
 * 当连接建立时触发的回调函数
 * @param $connection
 */
 public function onConnect($connection)
 {
 }
 /**
 * 当连接断开时触发的回调函数
 * @param $connection
 */
 public function onClose($connection)
 {
 
 }
 /**
 * 当客户端的连接上发生错误时触发
 * @param $connection
 * @param $code
 * @param $msg
 */
 public function onError($connection, $code, $msg)
 {
 echo "error $code $msg
";
 }
 /**
 * 每个进程启动
 * @param $worker
 */
 public function onWorkerStart($worker)
 {
 }
}

e)在命令行下运行,启动监听服务php server.php

f)任意位置新建一个html文件。其中内容为:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
ws = new WebSocket("ws://localhost:2346");
ws.onopen = function() {
 alert("连接成功");
 ws.send('tom');
 alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
 alert("收到服务端的消息:" + e.data);
};
</script>

g)保存,用浏览器打开,就可以看到链接成功。

Linux版安装

a)只需将Windows版安装的b)步骤中的composer命令只执行:composer require topthink/think-worker。即可,其余步骤不变。

简单使用GatewayWorker

<script type="text/javascript">
/**
 * 与GatewayWorker建立websocket连接,域名和端口改为你实际的域名端口,
 * 其中端口为Gateway端口,即start_gateway.php指定的端口。
 * start_gateway.php 中需要指定websocket协议,像这样
 * $gateway = new Gateway(websocket://0.0.0.0:7272);
 */
ws = new WebSocket("ws://127.0.0.1:8282");
// 服务端主动推送消息时会触发这里的onmessage
ws.onmessage = function(e){
 // json数据转换成js对象
 var bindUrl = "{:url('push/BindClientId')}";
 var data = e.data;
 var type = data.type || '';
 switch(type){
 // Events.php中返回的init类型的消息,将client_id发给后台进行uid绑定
 case 'init':
 // 利用jquery发起ajax请求,将client_id发给后端进行uid绑定
 $.post(bindUrl, {client_id: data.client_id}, function(data){
 }, 'json');
 break;
 // 当mvc框架调用GatewayClient发消息时直接alert出来
 default :
 var text = e.data;
 var str = '<li style="width:100%; height:60px; border:1px solid #000">' +text +'</li>';
 $('#message_box').append();
 // alert(e.data);
 }
};
</script>
class Push{
 
 public function helloAction () {
 $uid = $_GET['uid'];
 session('uid', $uid);
 $view = new View;
 return $view->fetch();
 }
 public function BindClientIdAction () {
 
 $client_id = $_POST['client_id'];
 // 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值
 Gateway::$registerAddress = '127.0.0.1:1238';
 $bindUid = session('uid');
 // 假设用户已经登录,用户uid和群组id在session中
 // client_id与uid绑定
 Gateway::bindUid($client_id, $bindUid);
 // 加入某个群组(可调用多次加入多个群组)
 // Gateway::joinGroup($client_id, $group_id);
 }
 public function AjaxSendMessageAction () {
 $message = $_POST['message'];
 // 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值
 Gateway::$registerAddress = '127.0.0.1:1238';
 GateWay::sendToAll($message);
 }
}

下载本文
显示全文
专题