thinkphp+GatewayWorker实现即时通讯

本文介绍了如何在Windows和Linux环境下安装TP5.1框架,集成GatewayWorker进行Websocket通信。通过设置GatewayWorker实现服务注册,以及配置Nginx或Apache进行反向代理。提供了基础的配置和测试步骤。
摘要由CSDN通过智能技术生成

话不多说直接上干货

安装TP5.1

git clone https://github.com/top-think/think tp5

切换到根目录
下载核心代码

git clone https://github.com/top-think/framework thinkphp

然后去GatewayWorker官网下载demo
下载链接

liunx 下载
在这里插入图片描述
windows 下载
在这里插入图片描述
下载完成后把文件放到tp目录里面的vendor

在这里插入图片描述
进入applications/start_gateway.php里面

<?php 
/**
 * This file is part of workerman.
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the MIT-LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @author walkor<walkor@workerman.net>
 * @copyright walkor<walkor@workerman.net>
 * @link http://www.workerman.net/
 * @license http://www.opensource.org/licenses/mit-license.php MIT License
 */
use \Workerman\Worker;
use \Workerman\WebServer;
use \GatewayWorker\Gateway;
use \GatewayWorker\BusinessWorker;
use \Workerman\Autoloader;

// 自动加载类
require_once __DIR__ . '/../../vendor/autoload.php';

// gateway 进程,这里使用Text协议,可以用telnet测试
$gateway = new Gateway("Websocket://0.0.0.0:8282");
// gateway名称,status方便查看
$gateway->name = 'YourAppGateway';
// gateway进程数
$gateway->count = 4;
// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '127.0.0.1';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口 
$gateway->startPort = 2900;
// 服务注册地址
$gateway->registerAddress = '127.0.0.1:1238';

// 心跳间隔
//$gateway->pingInterval = 10;
// 心跳数据
//$gateway->pingData = '{"type":"ping"}';

/* 
// 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
$gateway->onConnect = function($connection)
{
    $connection->onWebSocketConnect = function($connection , $http_header)
    {
        // 可以在这里判断连接来源是否合法,不合法就关掉连接
        // $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接
        if($_SERVER['HTTP_ORIGIN'] != 'http://kedou.workerman.net')
        {
            $connection->close();
        }
        // onWebSocketConnect 里面$_GET $_SERVER是可用的
        // var_dump($_GET, $_SERVER);
    };
}; 
*/

// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}


直接粘贴复制就行

然后再Gatewayworker-for-win根目录双击start_for_win.bat
成功之后如下图
在这里插入图片描述
接着写前端页面还有后端业务逻辑处理可以先简单测一下
打开浏览器F12在控制台输入

 ws = new WebSocket("ws:127.0.0.1:8282");

    ws.onopen = function() {
        console.log("连接成功");
        //10秒发送一次心跳包
        var heart = JSON.stringify({"type":"ping"});
        setInterval(function(){
            ws.send(heart);
        },10000);
    };

简单就是这样然后就是后端业务逻辑了,聊天记录持久化,文件传输,这些自己去git上可以找找现成的源码。

注:windows 简单不牵扯一些SSL证书,还有代理等等,在liunx上面就需要配置一些东西,nginx就配置反向代理:

location / {
        proxy_set_header Host $host;
        proxy_pass       http://test_view;
        proxy_redirect   off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /websocket/v2 {
        proxy_redirect off;
      proxy_read_timeout 60s;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto   "http";
        proxy_set_header Host                $host;
        proxy_set_header X-NG-PRX-Host $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://test_view;
    }

apache在配置文件里面加三行就行

    ProxyRequests Off
    ProxyPass /wss ws://你的域名:8282/wss
    ProxyPassReverse /wss 你的域名/wss

结束,欢迎各位大佬在评论区纠正错误,愿各位程序员都能成为茫茫牛海中的一牛!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值