我用原始php写了 tcpSocket 。用tcpClient 能连接,websocket也能连接。那workerman里者两种server区别在哪里?
websocket 是一种通讯协议,类似http ftp smtp这些都是属于通讯协议。
不管websocket http ftp smtp 等这些应用层通讯协议都是基于tcp传输层协议的。
<?php use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; // websocket服务端 $ws = new Worker('websocket://0.0.0.0:4236'); $ws->onConnect = function($connection) { $connection->onWebSocketConnect = function($connection , $http_header) { // 可以在这里判断连接来源是否合法,不合法就关掉连接 // $_SERVER标识来自哪个站点的页面发起的websocket链接 if($_SERVER != 'http://chat.workerman.net') { $connection->close(); } // onWebSocketConnect 里面$_GET $_SERVER是可用的 // var_dump($_GET, $_SERVER); }; }; Worker::runAll();
开启websocket后 netstat -anp|grep 4236 看不到监听 。 ps aux|grep php 可以看到进程
开启tcp后 netstat -anp|grep 4236 就看得到监听
加上worker = new Worker("websocket://0.0.0.0:8005");就这样
Workerman start in DEBUG mode Master socket : Resource id #19
没有就
Workerman start in DEBUG mode ----------------------- WORKERMAN ----------------------------- Workerman version:3.3.6 PHP version:5.5.36 ------------------------ WORKERS ------------------------------- user worker listen processes status root none tcp://0.0.0.0:8000 4 root none http://0.0.0.0:8005 1
不要提前运行 Worker::runAll();
<?php use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; Worker::$daemonize = true; $ws_worker = new Worker("tcp://0.0.0.0:8000"); $wd_worker = new Worker("http://0.0.0.0:8005"); $ww_worker = new Worker("websocket://0.0.0.0:8081"); //启动4个进程对外提供服务 //当接收到客户端发来的数据后显示数据并回发到客户端 $ws_worker->onMessage = function($connection, $data) { //显示数据 echo "you just received: $data\n";
//向客户端回发数据 $connection->send("you just send: $data");
};
//运行worker Worker::runAll(); ?> 还是Master socket : Resource id #19
不要直接运行 Worker::runAll(); 运行 Worker::runAll(); 后后面的代码就不会运行了,也就是其它端口的监听代码执行不到。
Worker::runAll(); 去掉 或者像例子那样改成 if(!defined('GLOBAL_START')) { Worker::runAll(); }
websocket 是一种通讯协议,类似http ftp smtp这些都是属于通讯协议。
不管websocket http ftp smtp 等这些应用层通讯协议都是基于tcp传输层协议的。
开启websocket后 netstat -anp|grep 4236 看不到监听 。 ps aux|grep php 可以看到进程
开启tcp后 netstat -anp|grep 4236 就看得到监听
加上worker = new Worker("websocket://0.0.0.0:8005");就这样
Workerman start in DEBUG mode
Master socket : Resource id #19
没有就
不要提前运行 Worker::runAll();
<?php
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
Worker::$daemonize = true;
$ws_worker = new Worker("tcp://0.0.0.0:8000");
$wd_worker = new Worker("http://0.0.0.0:8005");
$ww_worker = new Worker("websocket://0.0.0.0:8081");
//启动4个进程对外提供服务
//当接收到客户端发来的数据后显示数据并回发到客户端
$ws_worker->onMessage = function($connection, $data) {
//显示数据
echo "you just received: $data\n";
};
//运行worker
Worker::runAll();
?>
还是Master socket : Resource id #19
不要直接运行 Worker::runAll();
运行 Worker::runAll(); 后后面的代码就不会运行了,也就是其它端口的监听代码执行不到。
Worker::runAll(); 去掉
或者像例子那样改成
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}