還有就是workerman多少次未收到客戶端心跳檢測回應會認為是掉線的?
// 心跳間隔
$gateway->pingInterval = 2;
// 心跳數據
$gateway->pingData = '{"type":"ping"}';
websocket客戶端可以收到{"type":"ping"},但是app端收不到,請問是什么問題呢?
手冊這里有抓包教程,可以看下app是否完成了websocket握手
http://doc3.workerman.net/debug/tcpdump.html
啟動界面:
# php start.php start -d
Workerman start in DAEMON mode
----------------------- WORKERMAN -----------------------------
Workerman version:3.1.8 PHP version:5.4.43
------------------------ WORKERS -------------------------------
user worker listen processes status
root ChatBusinessWorker none 1
root ChatGateway Websocket ://0.0.0.0:7272 1
root apptcp tcp ://0.0.0.0:55250 1
root WebServer http ://0.0.0.0:55151 2
----------------------------------------------------------------
Input "php start.php stop" to quit. Start success.
start_gateway.php 代碼:
<?php
use \Workerman\Worker;
use \GatewayWorker\Gateway;
use \Workerman\Autoloader;
// 自動加載類
require_once __DIR__ . '/../../Workerman/Autoloader.php';
Autoloader::setRootPath(__DIR__);
// gateway 進程
$gateway = new Gateway("Websocket://0.0.0.0:7272");
// 設置名稱,方便status時查看
$gateway->name = 'ChatGateway';
// 設置進程數,gateway進程數建議與cpu核數相同
$gateway->count = 1;
// 分布式部署時請設置成內網ip(非127.0.0.1)
$gateway->lanIp = '127.0.0.1';
// 內部通訊起始端口,假如$gateway->count=4,起始端口為4000
// 則一般會使用4001 4002 4003 4004 4個端口作為內部通訊端口
$gateway->startPort = 3000;
// 心跳間隔
$gateway->pingInterval = 2;
// 心跳數據
$gateway->pingData = '{"type":"ping"}';
// ########新增端口支持socket開始######
// 新增55250端口,開啟socket連接
$gateway_text = new Gateway("tcp://0.0.0.0:55250");
// 進程名稱,主要是status時方便識別
$gateway_text->name = 'apptcp';
// 開啟多少text協議的gateway進程
$gateway_text->count = 1;
// 本機ip(分布式部署時需要設置成內網ip)
$gateway_text->lanIp = '127.0.0.1';
// gateway內部通訊起始端口,起始端口不要重復
$gateway_text->startPort = 2500;
// 心跳間隔
$gateway_text->pingInterval = 1;
$gateway_text->pingData = '{"type":"ping"}';
// 如果不是在根目錄啟動,則運行runAll方法
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
參考手冊用抓包工具對55250端口抓沒看到{"type":"ping"}