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>Workerman\Worker;

  <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>Workerman\Worker;

  <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\r\nConnection:keep-alive\r\nServer:workerman\1.1.4\r\n\r\nhello"</span>);

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

  <span class="comment">//$connection->close("HTTP/1.1 200 OK\r\nServer:workerman\1.1.4\r\n\r\nhello");</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

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

workerman是一个高性能的PHP socket服务器框架的更多相关文章

  1. PHP socket 服务器框架集

    1.Swoole:重新定义PHP PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时 ...

  2. 可扩展多线程异步Socket服务器框架EMTASS 2.0 (转自:http://blog.csdn.net/hulihui)

    可扩展多线程异步Socket服务器框架EMTASS 2.0 (转自:http://blog.csdn.net/hulihui) 0 前言 >>[前言].[第1节].[第2节].[第3节]. ...

  3. 又一个高性能轻量级的iOS模型框架YYModel

    前言 iOS的模型框架其实有很多了,去年研究过Mantle,也了解过JSONModel.MJExtension,最近的项目项目优化的时候,再次考虑,基于轻量级.高性能的考虑,最终选择了YYModel. ...

  4. 可扩展多线程异步Socket服务器框架EMTASS 2.0 续

    转载自Csdn:http://blog.csdn.net/hulihui/article/details/3158613 (原创文章,转载请注明来源:http://blog.csdn.net/huli ...

  5. 可扩展多线程异步Socket服务器框架EMTASS 2.0

    0 前言 >>[前言].[第1节].[第2节].[第3节].[第4节].[第5节].[第6节] 在程序设计与实际应用中,Socket数据包接收服务器够得上一个经典问题了:需要计算机与网络编 ...

  6. C#实现高性能高并发Socket服务器

    1.高并发服务器实现一 本文转载 转载地址 2.高并发服务器实现二 本文转载 转载内容在于学习C#实现的高并发服务器 以下个人观点 1 需要注意SocketAsyncEventArgs的使用 2 做到 ...

  7. 对Swoole、Workerman和php自带的socket的理解

    为什么php自带的socket不怎么听说,基本都是用swoole,workerman去实现? 1.PHP的socket扩展是一套socket api,仅此而已. swoole,用C实现,它的socke ...

  8. 通过监控线程状态来保证socket服务器的稳定运行

    云平台中使用的socket服务器是我们自己定义一套通信协议,并通过C#实现的一个socket服务. 该服务目前是和web服务一起运行在IIS容器中,通过启动一个永不退出的新线程来监听端口. 在开发的初 ...

  9. 通过线程监控socket服务器是否done机

    现实中的socket可能会因为各种原因done机,但这么重要的服务器怎么能允许这种事情发生?这次我们就来通过一个线程去监控socket服务器,如果done机重新将其启动. 下面是监控项目和socket ...

随机推荐

  1. iOS 利用self.navigationItem.backBarButtonItem修改后退按钮文字

    @property(nonatomic,retain) UIBarButtonItem *backBarButtonItem; // Bar button item to use for the ba ...

  2. C++ 通过WIN32 API 获取逻辑磁盘详细信息

    众所周知,在微软的操作系统下编写应用程序,最主要的还是通过windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件, 下载源文件 今天我们主 ...

  3. 现在, Delphi 的多线程已经非常易用了!

    先看一个非多线程的例子, 代码执行时不能进行其它操作(譬如拖动窗体): {自定义方法: 在窗体上绘制...} procedure MyMethod; var   i: Integer; begin   ...

  4. c++ template函数的声明和实现需要在同一个文件中

    新建一个class C;生成2个文件C.h和C.cpp,在C.h中声明一个函数 template<class T> T stringTo(char* str); 直接用VAssistX的R ...

  5. [MAC] SVN lock的使用

    转载 : http://www.eefocus.com/czzheng/blog/12-03/245532_4ca94.html 如果压根没有锁lock,那么每个人都拥有一个本地copy,每个人都能自 ...

  6. jQuery工具函数

    要点:1.字符串操作2.数组和对象操作3.测试操作4.URL 操作5.浏览器检测6.其他操作 工具函数是指直接依附于 jQuery 对象,针对 jQuery 对象本身定义的方法,即全局性的函数.它的作 ...

  7. transient关键字使用笔记

    >>transient的作用及使用方法 一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过 ...

  8. Linux常用命令_(基本命令)

    基本命令:ls.cd.pwd.man 1.ls 打印当前目录下的文件和目录文件 用法详解:: ls [-alFR] [文件或目录] -a 显示所有文件,包括隐藏文件:[root@qmfsun]#ls ...

  9. Spring的bean标签

    Spring框架中主要有四种标签bean.alias.import.beans,其中bean标签是其他标签的基础. 一.bean标签的属性 scope:用来配置spring bean的作用域 sing ...

  10. javascript优化--09模式(代码复用)02

    原型继承 ://现代无类继承模式 基本代码: var parent = { name : "Papa" } var child = object(parent); function ...