• workerman是一个高性能的PHP socket服务器框架


      workerman-chatorkerman是一款纯PHP开发的开源高性能的PHP socket服务器框架。被广泛的用于手机app、手游服务端、网络游戏服务器、聊天室服务器、硬件通讯服务器、智能家居、车联网、物联网等领域的开发。支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。基于workerman开发者可以更专注于业务逻辑开发,不必再为PHP Socket底层开发而烦恼。

      workerman

      workerman是一个高性能的PHP socket服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用,例如Rpc服务、聊天室服务器、手机游戏服务器等。

      workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解PHP socket以及PHP多进程细节。workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行。

      特性

      支持HHVM

      使用PHP开发

      支持PHP多进程/多线程(多线程版本)

      标准输入输出重定向

      支持毫秒定时器

      支持基于事件的异步编程

      守护进程化

      支持TCP/UDP

      支持多端口监听

      接口上支持各种应用层协议

      支持libevent事件轮询库,支持高并发

      支持服务平滑重启

      支持PHP文件更新检测及自动加载

      支持PHP长连接

      支持以指定用户运行子进程

      支持telnet远程控制

      高性能

      安装

      下载后解压即可

      服务端开发示例WebSocket Server

      1、新建文件start.php

      <code><span class="preprocessor"><?php</span>

      <span class="keyword">use</span>WorkermanWorker;

      <span class="keyword">require_once</span><span class="string">'./Workerman/Autoloader.php'</span>;

      <span class="comment">//创建一个Worker监听2346端口,使用websocket协议通讯</span>

      <span class="variable">$ws_worker</span>=<span class="keyword">new</span>Worker(<span class="string">"websocket://0.0.0.0:2346,2881064151"</span>);

      <span class="comment">//启动4个进程对外提供服务</span>

      <span class="variable">$ws_worker</span>->count=<span class="number">4</span>;

      <span class="comment">//当收到客户端发来的数据后返回hello$data给客户端</span>

      <span class="variable">$ws_worker</span>->onMessage=<span class="function"><span class="keyword">function</span><span class="params">(</span></span><span class="function"><span class="params"><span class="variable">$connection</span></span></span><span class="function"><span class="params">,</span></span><span class="function"><span class="params"><span class="variable">$data</span></span></span><span class="function"><span class="params">)</span>

      {</span>

      <span class="comment">//向客户端发送hello$data</span>

      <span class="variable">$connection</span>->send(<span class="string">'hello'</span>.<span class="variable">$data</span>);

      };

      <span class="comment">//运行</span>

      Worker::runAll()

      2、启动服务类似下图:

      1

      php start.php start-d

      3、查看workerman运行状态类似如下界面:

      1

      php start.php status

      性能

      测试环境:

      系统:ubuntu 12.04 LTS 64位

      内存:8G

      cpu:Intel®Core™i3-3220 CPU 3.30GHz×4

      

      <span class="preprocessor"><?php</span>

      <span class="keyword">use</span>WorkermanWorker;

      <span class="variable">$worker</span>=<span class="keyword">new</span>Worker(<span class="string">'tcp://0.0.0.0:1234'</span>);

      <span class="variable">$worker</span>->count=<span class="number">3</span>;

      <span class="variable">$worker</span>->onMessage=<span class="function"><span class="keyword">function</span><span class="params">(</span></span><span class="function"><span class="params"><span class="variable">$connection</span></span></span><span class="function"><span class="params">,</span></span><span class="function"><span class="params"><span class="variable">$data</span></span></span><span class="function"><span class="params">)</span>

      {</span>

      <span class="comment">//长连接</span>

      <span class="variable">$connection</span>->send(<span class="string">"HTTP/1.1 200 OK Connection:keep-alive Server:workerman1.1.4 hello"</span>);

      <span class="comment">//短连接</span>

      <span class="comment">//$connection->close("HTTP/1.1 200 OK Server:workerman1.1.4 hello");</span>

      };

      Worker::runAll();

      业务逻辑

      EchoServer

      结果

      短链接(每次请求完成后关闭链接,下次请求建立新的链接):

      条件:压测脚本开500个线程,每个线程链接Workerman 10W次,每次链接发送1个请求

      结果:吞吐量:3W/S,cpu:60%,内存占用:4*8M=32M

      长链接(每次请求后不关闭链接,下次请求继续复用这个链接):

      条件:压测脚本开1000个线程,每个线程链接Workerman 1次,每个链接发送10W请求

      结果:吞吐量:15.6W/S,cpu:68%,内存占用:4*8M=32M

      无流量抖动,无内存泄漏,性能非常强悍

  • 相关阅读:
    LeetCode 1122. Relative Sort Array (数组的相对排序)
    LeetCode 46. Permutations (全排列)
    LeetCode 47. Permutations II (全排列 II)
    LeetCode 77. Combinations (组合)
    LeetCode 1005. Maximize Sum Of Array After K Negations (K 次取反后最大化的数组和)
    LeetCode 922. Sort Array By Parity II (按奇偶排序数组 II)
    LeetCode 1219. Path with Maximum Gold (黄金矿工)
    LeetCode 1029. Two City Scheduling (两地调度)
    LeetCode 392. Is Subsequence (判断子序列)
    写程序判断系统是大端序还是小端序
  • 原文地址:https://www.cnblogs.com/cbryge/p/6022384.html
Copyright © 2020-2023  润新知