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. (原创)Python文件与文件系统系列(2)——os模块对文件、文件系统操作的支持

    os模块的功能主要包括文件系统部分和进程管理部分,这里介绍其中与文件系统相关的部分. 当请求操作系统执行操作失败时,os模块抛出内置异常 exceptions.OSError 的实例,可以通过 os. ...

  2. 【JAVA、C++】LeetCode 020 Valid Parentheses

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  3. August 3rd, 2016, Week 32nd, Wednesday

    I am looking for someone to share in an adventure. 我在找能和我一起分享冒险之旅的人. We are all looking for someone ...

  4. vs c++中读取数据流并存储

    ifstream in("test.txt"); vector<string> vs; string s; while(!in.eof()) { in>>s ...

  5. Period(poj 1961)

    题目大意: 给你一个字符串,求这个字符串到第i个字符为止的循环节的次数. 比如aabaabaabaab,长度为12.到第二个a时,a出现2次,输出2.到第二个b时,aab出现了2次,输出2.到第三个b ...

  6. HttpHandler动态生成图片

    1.向服务器请求返回图片,浏览器是不知道服务上有这个图片的存在的,只是发出请求,接收请求,显示图片 string path = context.Server.MapPath("~/1.jpg ...

  7. sizeof(class)

    //#define _REENTRANT //#define _POSIX_C_SOURCE #include <iostream> #include <string> #in ...

  8. C语言实现大数据除法

    本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入格式: 输入在1行中依次给出A和B,中间以1空格分隔. 输出格 ...

  9. C#开发微信公众平台-就这么简单(附Demo)(转载)

    转载地址:http://www.cnblogs.com/xishuai/p/3625859.html 写在前面 服务号和订阅号 URL配置 创建菜单 查询.删除菜单 接受消息 发送消息(图文.菜单事件 ...

  10. Jquery鼠标滚动到页面底部自动加载更多内容,使用分页

    index.php代码   [html] view plaincopy <!DOCTYPE html PUBLIC ;}                .single_item{padding: ...