|
|
@@ -1,4 +1,4 @@
|
|
|
-<?php
|
|
|
+<?php
|
|
|
/**
|
|
|
* This file is part of workerman.
|
|
|
*
|
|
|
@@ -11,6 +11,7 @@
|
|
|
* @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;
|
|
|
@@ -20,8 +21,33 @@ use \Workerman\Autoloader;
|
|
|
// 自动加载类
|
|
|
require_once __DIR__ . '/../../vendor/autoload.php';
|
|
|
|
|
|
-// gateway 进程,这里使用Text协议,可以用telnet测试
|
|
|
-$gateway = new Gateway("Websocket://0.0.0.0:8282");
|
|
|
+$ifssl = false;
|
|
|
+
|
|
|
+if ($ifssl) {
|
|
|
+ $mds = DIRECTORY_SEPARATOR;
|
|
|
+ if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
|
|
|
+ $sslkeyPath = realpath(dirname(__FILE__) . $mds . '..' . $mds . '..' . $mds . '..' . $mds . '..') . $mds . 'application' . $mds . 'sslkey' . $mds;
|
|
|
+ } else {
|
|
|
+ $sslkeyPath = realpath(dirname(__FILE__) . $mds . '..' . $mds . '..' . $mds . '..' . $mds . '..' . $mds . '..') . $mds . 'application' . $mds . 'sslkey' . $mds;
|
|
|
+ }
|
|
|
+ // 证书最好是申请的证书
|
|
|
+ $context = array(
|
|
|
+ 'ssl' => array(
|
|
|
+ 'local_cert' => $sslkeyPath . 'ssl.crt', // 也可以是crt文件
|
|
|
+ 'local_pk' => $sslkeyPath . 'ssl.key',
|
|
|
+ 'verify_peer' => false,
|
|
|
+ //'verify_peer_name' => false,
|
|
|
+ 'allow_self_signed' => true, //如果是自签名证书需要开启此选项
|
|
|
+ )
|
|
|
+ );
|
|
|
+ // gateway 进程,这里使用Text协议,可以用telnet测试
|
|
|
+ $gateway = new Gateway("Websocket://0.0.0.0:9101", $context);
|
|
|
+ //开启ssl
|
|
|
+ $gateway->transport = 'ssl';
|
|
|
+} else {
|
|
|
+ $gateway = new Gateway("Websocket://0.0.0.0:9101");
|
|
|
+}
|
|
|
+
|
|
|
// gateway名称,status方便查看
|
|
|
$gateway->name = 'WhisperGateway';
|
|
|
// gateway进程数
|
|
|
@@ -29,37 +55,53 @@ $gateway->count = 4;
|
|
|
// 本机ip,分布式部署时使用内网ip
|
|
|
$gateway->lanIp = '127.0.0.1';
|
|
|
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
|
|
|
-// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
|
|
|
+// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
|
|
|
$gateway->startPort = 2900;
|
|
|
// 服务注册地址
|
|
|
$gateway->registerAddress = '127.0.0.1:1238';
|
|
|
|
|
|
+
|
|
|
// 心跳间隔
|
|
|
-$gateway->pingInterval = 10;
|
|
|
-// 心跳数据
|
|
|
+$gateway->pingInterval = 20;
|
|
|
+$gateway->pingNotResponseLimit = 2;
|
|
|
$gateway->pingData = '{"message_type":"ping"}';
|
|
|
|
|
|
-/*
|
|
|
+$tmpPath = isset($_SERVER['TEMP']) ? $_SERVER['TEMP'] : '/tmp';
|
|
|
+Worker::$logFile = $tmpPath . '/workerman_' . date("Y-m-d") . '.log';
|
|
|
+Worker::$stdoutFile = $tmpPath . '/stdout_' . date("Y-m-d") . '.log';
|
|
|
+
|
|
|
+
|
|
|
// 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
|
|
|
-$gateway->onConnect = function($connection)
|
|
|
-{
|
|
|
- $connection->onWebSocketConnect = function($connection , $http_header)
|
|
|
- {
|
|
|
+$gateway->onConnect = function ($connection) {
|
|
|
+ $connection->onWebSocketConnect = function ($connection, $http_header) {
|
|
|
+ //$apiToken = md5(strtolower('Customer-Service' . strtotime(date('Y-m-d')) . $_SERVER['HTTP_ORIGIN']));
|
|
|
+ $apiToken = md5(strtolower('Customer-Service' . $_SERVER['HTTP_ORIGIN']));
|
|
|
+ //echo $apiToken."/".$_GET['apiToken'];
|
|
|
+ $_SESSION['userAgent'] = $_SERVER['HTTP_USER_AGENT'];
|
|
|
+ $_SESSION['origin'] = $_SERVER['HTTP_ORIGIN'];//
|
|
|
+ $getToken = isset($_GET['apiToken']) ? $_GET['apiToken'] : '';
|
|
|
+
|
|
|
+ if ($getToken !== $apiToken) {
|
|
|
+ $connection->close();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $_SESSION['remotip'] = $connection->getRemoteIp();
|
|
|
+ $_SESSION['remotport'] = $connection->getRemotePort();
|
|
|
+
|
|
|
+
|
|
|
// 可以在这里判断连接来源是否合法,不合法就关掉连接
|
|
|
// $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接
|
|
|
- if($_SERVER['HTTP_ORIGIN'] != 'http://kedou.workerman.net')
|
|
|
+ /*if($_SERVER['HTTP_ORIGIN'] != 'http://kedou.workerman.net')
|
|
|
{
|
|
|
$connection->close();
|
|
|
- }
|
|
|
+ }*/
|
|
|
// onWebSocketConnect 里面$_GET $_SERVER是可用的
|
|
|
// var_dump($_GET, $_SERVER);
|
|
|
};
|
|
|
-};
|
|
|
-*/
|
|
|
+};
|
|
|
|
|
|
// 如果不是在根目录启动,则运行runAll方法
|
|
|
-if(!defined('GLOBAL_START'))
|
|
|
-{
|
|
|
+if (!defined('GLOBAL_START')) {
|
|
|
Worker::runAll();
|
|
|
}
|
|
|
|