基于thinkphp 5.1 + workman + gateway 实现简单的在线客服聊天系统

   日期:2024-12-20    作者:hubinusb 浏览:58    移动:http://w.yusign.com/mobile/quote/2261.html
# Workerman [![Gitter](https://badges.gitter.im/walkor/Workerman.svg)](https://gitter.im/walkor/Workerman?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=body_badge) [![Latest Stable Version](https://poser.pugx.org/workerman/workerman/v/stable)](https://packagist.org/packages/workerman/workerman) [![Total Downloads](https://poser.pugx.org/workerman/workerman/downloads)](https://packagist.org/packages/workerman/workerman) [![Monthly Downloads](https://poser.pugx.org/workerman/workerman/d/monthly)](https://packagist.org/packages/workerman/workerman) [![Daily Downloads](https://poser.pugx.org/workerman/workerman/d/daily)](https://packagist.org/packages/workerman/workerman) [![License](https://poser.pugx.org/workerman/workerman/license)](https://packagist.org/packages/workerman/workerman) ## What is it Workerman is an asynchronous event driven PHP framework with high performance for easily building fast, scalable network applications. Supports HTTP, Websocket, SSL and other custom protocols. Supports libevent, [HHVM](https://github.com/facebook/hhvm) , [ReactPHP](https://github.com/reactphp/react). ## Requires PHP 5.3 or Higher A POSIX compatible operating system (Linux, OSX, BSD) POSIX and PCNTL extensions for PHP ## Installation ``` composer require workerman/workerman ``` ## Basic Usage ### A websocket server ```php <?php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; // Create a Websocket server $ws_worker = new Worker("websocket://0.0.0.0:2346"); // 4 processes $ws_worker->count = 4; // Emitted when new connection come $ws_worker->onConnect = function($connection) { echo "New connection "; }; // Emitted when data received $ws_worker->onMessage = function($connection, $data) { // Send hello $data $connection->send('hello ' . $data); }; // Emitted when connection closed $ws_worker->onClose = function($connection) { echo "Connection closed "; }; // Run worker Worker::runAll(); ``` ### An http server ```php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; // #### http worker #### $http_worker = new Worker("http://0.0.0.0:2345"); // 4 processes $http_worker->count = 4; // Emitted when data received $http_worker->onMessage = function($connection, $data) { // $_GET, $_POST, $_COOKIE, $_SESSION, $_SERVER, $_FILES are available var_dump($_GET, $_POST, $_COOKIE, $_SESSION, $_SERVER, $_FILES); // send data to client $connection->send("hello world "); }; // run all workers Worker::runAll(); ``` ### A WebServer ```php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWebServer; use WorkermanWorker; // WebServer $web = new WebServer("http://0.0.0.0:80"); // 4 processes $web->count = 4; // Set the root of domains $web->addRoot('www.your_domain.com', '/your/path/Web'); $web->addRoot('www.another_domain.com', '/another/path/Web'); // run all workers Worker::runAll(); ``` ### A tcp server ```php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; // #### create socket and listen 1234 port #### $tcp_worker = new Worker("tcp://0.0.0.0:1234"); // 4 processes $tcp_worker->count = 4; // Emitted when new connection come $tcp_worker->onConnect = function($connection) { echo "New Connection "; }; // Emitted when data received $tcp_worker->onMessage = function($connection, $data) { // send data to client $connection->send("hello $data "); }; // Emitted when new connection come $tcp_worker->onClose = function($connection) { echo "Connection closed "; }; Worker::runAll(); ``` ### Enable SSL ```php <?php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; // SSL context. $context = array( 'ssl' => array( 'local_cert' => '/your/path/of/server.pem', 'local_pk' => '/your/path/of/server.key', 'verify_peer' => false, ) ); // Create a Websocket server with ssl context. $ws_worker = new Worker("websocket://0.0.0.0:2346", $context);

基于thinkphp 5.1 + workman + gateway 实现简单的在线客服聊天系统

// Enable SSL. WebSocket+SSL means that Secure WebSocket (wss://). // The similar approaches for Https etc. $ws_worker->transport = 'ssl'; $ws_worker->onMessage = function($connection, $data) { // Send hello $data $connection->send('hello ' . $data); }; Worker::runAll(); ``` ### Custom protocol Protocols/MyTextProtocol.php ```php namespace Protocols; class MyTextProtocol { public static function input($recv_buffer) { // Find the position of the first occurrence of " " $pos = strpos($recv_buffer, " "); // Not a complete package. Return 0 because the length of package can not be calculated if($pos === false) { return 0; } // Return length of the package return $pos+1; } public static function decode($recv_buffer) { return trim($recv_buffer); } public static function encode($data) { return $data." "; } } ``` ```php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; // #### MyTextProtocol worker #### $text_worker = new Worker("MyTextProtocol://0.0.0.0:5678"); $text_worker->onConnect = function($connection) { echo "New connection "; }; $text_worker->onMessage = function($connection, $data) { // send data to client $connection->send("hello world "); }; $text_worker->onClose = function($connection) { echo "Connection closed "; }; // run all workers Worker::runAll(); ``` ### Timer ```php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; use WorkermanLibTimer; $task = new Worker(); $task->onWorkerStart = function($task) { // 2.5 seconds $time_interval = 2.5; $timer_id = Timer::add($time_interval, function() { echo "Timer run "; } ); }; // run all workers Worker::runAll(); ``` ### AsyncTcpConnection (tcp/ws/text/frame etc...) ```php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; use WorkermanConnectionAsyncTcpConnection; $worker = new Worker(); $worker->onWorkerStart = function() { // Websocket protocol for client. $ws_connection = new AsyncTcpConnection("ws://echo.websocket.org:80"); $ws_connection->onConnect = function($connection){ $connection->send('hello'); }; $ws_connection->onMessage = function($connection, $data){ echo "recv: $data "; }; $ws_connection->onError = function($connection, $code, $msg){ echo "error: $msg "; }; $ws_connection->onClose = function($connection){ echo "connection closed "; }; $ws_connection->connect(); }; Worker::runAll(); ``` ### Async Mysql of ReactPHP ``` composer require react/mysql ``` ```php <?php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; $worker = new Worker('tcp://0.0.0.0:6161'); $worker->onWorkerStart = function() { global $mysql; $loop = Worker::getEventLoop(); $mysql = new ReactMySQLConnection($loop, array( 'host' => '127.0.0.1', 'dbname' => 'dbname', 'user' => 'user', 'passwd' => 'passwd', )); $mysql->on('error', function($e){ echo $e; }); $mysql->connect(function ($e) { if($e) { echo $e; } else { echo "connect success
本文地址:http://w.yusign.com/quote/2261.html    述古往 http://w.yusign.com/static/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关行情
推荐行情
点击排行
{
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  版权声明  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号