本文共 1761 字,大约阅读时间需要 5 分钟。
项目分为Linux下和Window下,因为系统跑在Linux下所以Demo为Linux版,官网上有Window的版本。
入门级Demo: 项目目录,将workerman依赖包放在Workerman下count = 4;// 连接信息$userInfo = array ();//子进程启动时的回调函数$ws_worker->onWorkerStart = function($worker){ print_log("启动一个子进程");};//客户端与Workerman建立连接时(TCP三次握手完成后)触发的回调函数$worker->onConnect = function($connection){ print_log("用户连接进来,IP:"+$connection->getRemoteIp());};// 当收到客户端发来的数据后返回hello $data给客户端$ws_worker->onMessage = function ($connection, $data) { print_log ( $data ); $userInfo [$data] = $connection; send_message_to_all($userInfo,$connection->getRemoteIp());};// 客户端连接与Workerman断开时触发的回调函数$ws_worker->onClose = function ($connection) { print_log ( $connection."关闭连接"); remove_user ($userInfo, $connection );};// 客户端的连接上发生错误的回调方法$ws_worker->onError = function ($connection, $code, $msg) { print_log($connection."连接发送错误 $code:".$code.'-'."$msg:".$msg); remove_user ($userInfo, $connection );};//移除function remove_user($userInfo,$connection) { foreach ($userInfo as $id => $conn ) { if ($conn == $connection) { unset ( $userInfo [$id] ); } }}//给所有的人发送消息function send_message_to_all($userInfo,$msg){ foreach ($userInfo as $id => $conn ) { $conn->send($msg); }}// 运行workerWorker::runAll ();?>
页面端:
将项目放在Linux下随意目录下,不必非要放在apache和Nginx下。
切换到ws_test.php目录下(必须要,否则启动会报错)。 启动php ws_test.php start
将html页面放在apache下。在浏览器端打开即可。
踩坑:
启动时会报:PHP Fatal error: Call to undefined function Workerman\posix_getpid() in /var/temp/WebSocket03/Workerman/Worker.php on line 1908Fatal error: Call to undefined function Workerman\posix_getpid() in /var/temp/WebSocket03/Workerman/Worker.php on line 1908
检查系统是否满足workerman:curl -Ss | php
安照workman官网的说明一步步排查即可。 参考: