话不多说直接上干货
安装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
结束,欢迎各位大佬在评论区纠正错误,愿各位程序员都能成为茫茫牛海中的一牛!