作者:溪流-ju_506 | 来源:互联网 | 2023-06-29 15:38
废话不多说 测试 结果
composer require workerman/workerman
TP 根目录
#!/usr/bin/env php
uid))
{
// 没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证)
$connection->uid = $message_data['client_name'];
/* 保存uid到connection的映射,这样可以方便的通过uid查找connection,
* 实现针对特定uid推送数据
*/
$worker = $this->worker;
foreach($worker->connections as $conn)
{
$conn->send("{'type':'login','data':'".$message_data['client_name']."登陆成功'}");
}
}
case 'say':
return;
}
}
/**
* 当连接建立时触发的回调函数
* @param $connection
*/
public function onConnect($connection)
{
}
/**
* 向所有验证的用户发送消息
*/
public function sendAllMessage(){
global $worker;
foreach($worker->uidConnections as $connection)
{
$connection->send($message);
}
}
/**
* 当连接断开时触发的回调函数
* @param $connection
*/
public function onClose($connection)
{
}
/**
* 当客户端的连接上发生错误时触发
* @param $connection
* @param $code
* @param $msg
*/
public function onError($connection, $code, $msg)
{
echo "error $code $msgn";
}
/**
* 每个进程启动
* @param $worker
*/
public function onWorkerStart($worker)
{
}
}
think php lib 目录
// +----------------------------------------------------------------------
namespace thinkworker;
use WorkermanWorker;
use WorkermanConnectionTcpConnection;
use WorkermanLibTimer;
/**
* Worker控制器扩展类
*/
abstract class Server
{
protected $worker;
protected $socket = '';
protected $protocol = 'https';
protected $host = '0.0.0.0';
protected $port = ' ';
protected $processes = 4;
/**
* 架构函数
* @access public
*/
public function __construct()
{
$cOntext=array(
'ssl'=> array(
'local_cert'=>' .crt',
'local_pk' => ' .key',
'verify_peer' => false,
)
);
// 实例化 Websocket 服务
$this->worker = new Worker($this->socket ?: $this->protocol . '://' . $this->host . ':' . $this->port, $context);
// 设置进程数
$this->worker->transport = 'ssl';
$this->worker->count = $this->processes;
// 初始化
$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();
}
protected function init()
{
}
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
server 81 3:448;
#这里可以是多个服务端IP(分多行),设置权重就可以实现负载均衡了
server 8 3:2346;
}
#支持 wss
server {
listen 450 ssl;
server_name et.com;
#ssl on;
ssl_certificate in.pem;
ssl_certificate_key ey.pem;
ssl_session_timeout 20m;
ssl_verify_client off;
location /{
proxy_pass http://8 43:2346;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server
{
listen 80;
listen 443 ssl http2;
server_name et.com;
index index.php index.html index.htm default.php default.htm default.html;
root et.com/web;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate in.pem;
ssl_certificate_key ey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
include enable-php-72.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include eet.com.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(.user.ini|.htaccess|.git|.svn|.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ .well-known{
allow all;
}
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log /dev/null;
access_log off;
}
location ~ .*.(js|css)?$
{
expires 12h;
error_log /dev/null;
access_log off;
}
location ~ .*.(php|php5)?$
{
#fastcgi_pass 127.0.0.1:9001;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
#wss协议转发
location /wss {
proxy_pass et.com:448;
#代理到上面的地址去,
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
access_log et.com.log;
error_log et.com.error.log;
}
欢迎 各位 前来交流 疑难杂症
有的公司 用 GatewayWorker
同理
http://www.workerman.net/download/GatewayWorker.zip
nginx 配置不用变
ssl 启动就ok
同时注意 策略组 和 安全防火墙
// 心跳间隔 长链接加心跳要不然会被KO
$gateway->pingInterval = 10;
// 心跳数据
//$gateway->pingData = '{"type":"ping"}';
$gateway->pingData = '{"event":"ping","time":'.time().'}';
ini_set('display_errors', 'on');
use WorkermanWorker;
if(strpos(strtolower(PHP_OS), 'win') === 0)
{
exit("start.php not support windows, please use start_for_win.batn");
}
// 检查扩展
if(!extension_loaded('pcntl'))
{
exit("Please install pcntl extension. See http://doc3.workerman.net/appendices/install-extension.htmln");
}
if(!extension_loaded('posix'))
{
exit("Please install posix extension. See http://doc3.workerman.net/appendices/install-extension.htmln");
}
// 标记是全局启动
define('GLOBAL_START', 1);
require_once __DIR__ . '/../GatewayWorker/vendor/autoload.php';
// 加载所有Applications/*/start.php,以便启动所有服务
foreach(glob(__DIR__.'/../GatewayWorker/Applications/*/start*.php') as $start_file)
{
require_once $start_file;
}
// 运行所有服务
Worker::runAll();
根目录 启动文件
// 证书是会检查域名的,请使用域名连接
ws = new WebSocket("wss://域名/wss");
ws.Onopen= function() {
alert("连接成功");
ws.send('tom');
alert("给服务端发送一个字符串:tom");
};
ws.Onmessage= function(e) {
alert("收到服务端的消息:" + e.data);
};
QQ 1274510382
Wechat JNZ_aming
商业联盟 QQ群538250800
技术搞事 QQ群599020441
解决方案 QQ群152889761
加入我们 QQ群649347320
共享学习 QQ群674240731
纪年科技aming
网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。
叮叮叮:产品已上线 —>关注 官方-微信公众号——济南纪年信息科技有限公司
民生项目:商城加盟/娱乐交友/创业商圈/外包兼职开发-项目发布/
安全项目:态势感知防御系统/内网巡查系统
云服项目:动态扩容云主机/域名/弹性存储-数据库-云盘/API-AIeverthing
产品咨询/服务售后(同)
纸上得来终觉浅,绝知此事要躬行 !!!
寻找志同道合伙伴创业中。。。抱团滴滴aming联系方式!!
#本文为广告系统自动投放广告
# 如有侵权 删改 请速速联系我们