Workerman start in DAEMON mode
------------------------------- WORKERMAN --------------------------------
Workerman version:3.5.17? ? ? ? ? PHP version:7.0.19
-------------------------------- WORKERS ---------------------------------
proto? ?user? ? ? ? ? ? worker? ? ? ? ? listen? ? ? ? ? processes? ? status
Input "php start.php stop" to stop. Start success.
方便的話,貼下完整的 start .php 內(nèi)容。
大佬,這個問題我解決了,是因為foreach(glob(__DIR__ .'/run/start*.php') as $start_file) 這里的路徑錯了,現(xiàn)在有個新問題,我在js里面new WebSocket('ws://127.0.0.1:8282')IP127.0.0.1的時候會報WebSocket connection to 'ws://127.0.0.1:8282/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED,但是如果改成線上的IP地址就可以,這是我start_gateway.php的代碼
use Workerman\Worker;
use Workerman\WebServer;
use GatewayWorker\Gateway;
use GatewayWorker\BusinessWorker;
use Workerman\Autoloader;
// 自動加載類
require_once dirname(__FILE__) . '/../../../vendor/autoload.php';
// gateway 進(jìn)程,這里使用Text協(xié)議,可以用telnet測試
$gateway = new Gateway("Websocket://0.0.0.0:8282");
// gateway名稱,status方便查看
$gateway->name = 'YourAppGateway';
// gateway進(jìn)程數(shù)
$gateway->count = 1;
// 本機(jī)ip,分布式部署時使用內(nèi)網(wǎng)ip
$gateway->lanIp = '127.0.0.1';
// 內(nèi)部通訊起始端口,假如$gateway->count=4,起始端口為4000
// 則一般會使用4000 4001 4002 4003 4個端口作為內(nèi)部通訊端口
$gateway->startPort = 2900;
// 服務(wù)注冊地址
$gateway->registerAddress = '127.0.0.1:1233';
// 心跳間隔
$gateway->pingInterval = 10;
// 心跳數(shù)據(jù)
$gateway->pingData = '{"type":"ping"}';
/
// 當(dāng)客戶端連接上來時,設(shè)置連接的onWebSocketConnect,即在websocket握手時的回調(diào)
$gateway->onConnect = function($connection)
{
$connection->onWebSocketConnect = function($connection , $http_header)
{
// 可以在這里判斷連接來源是否合法,不合法就關(guān)掉連接
// $_SERVER['HTTP_ORIGIN']標(biāo)識來自哪個站點(diǎn)的頁面發(fā)起的websocket鏈接
if($_SERVER['HTTP_ORIGIN'] != '
{
$connection->close();
}
// onWebSocketConnect 里面$_GET $_SERVER是可用的
// var_dump($_GET, $_SERVER);
};
};
/
// 如果不是在根目錄啟動,則運(yùn)行runAll方法
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
我阿里云和寶塔的端口都放開了,用公網(wǎng)的IP加8282端口就能正常連接運(yùn)行,換127.0.0.1會報WebSocket connection to 'ws://127.0.0.1:8282/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED,你看下我下面端口截圖
是否能這樣使用,和js代碼是否和服務(wù)端在同一機(jī)器并沒有什么關(guān)系。
首先你應(yīng)用面向的瀏覽器客戶端,對于js代碼無論是內(nèi)嵌服務(wù)端腳本編寫還是本地純html渲染,最終都是吐給瀏覽器渲染的,交由瀏覽器發(fā)起相應(yīng)請求。
換句話關(guān)注的是你瀏覽器客戶端所在的主機(jī)和服務(wù)端提供服務(wù)的主機(jī)是否在同一臺機(jī)器,如果在就可以用127.0.0.1,否則就用對應(yīng)服務(wù)器主機(jī)IP去連。