Iserver简介

Iserver是一个用python编写的网络服务框架(编译版本3.4.1),使用的是epool网络模型

测试机配置

处理器 2x Genuine Intel(R) CPU T2050 @ 1.60GHz

内存 2060MB (673MB used)

nginx开启进程数

root 2413 2409 0 09:17 pts/0 00:00:00 grep -i nginx

www 2414 2411 2 09:17 ? 00:00:00 nginx: worker process

www 2415 2411 0 09:17 ? 00:00:00 nginx: master process

www 2416 2411 0 09:17 ? 00:00:00 nginx: master process

www 2417 2411 0 09:17 ? 00:00:00 nginx: master process

www 2418 2411 0 09:17 ? 00:00:00 nginx: master process

www 2419 2411 0 09:17 ? 00:00:00 nginx: master process

www 2420 2411 0 09:17 ? 00:00:00 nginx: master process

www 2421 2411 0 09:17 ? 00:00:00 nginx: master process

开启8个nginx进程消耗120M内存(15M * 8 = 120M)

<pphp-cgi 开启进程数

root 2424 1 0 09:17 ? 00:00:00 php-fpm: master process

www 2425 2424 0 09:17 ? 00:00:00 php-fpm: pool www

www 2426 2424 0 09:17 ? 00:00:00 php-fpm: pool www

www 2427 2424 0 09:17 ? 00:00:00 php-fpm: pool www

www 2428 2424 0 09:17 ? 00:00:00 php-fpm: pool www

www 2429 2424 0 09:17 ? 00:00:00 php-fpm: pool www

www 2430 2424 0 09:17 ? 00:00:00 php-fpm: pool www

www 2431 2424 0 09:17 ? 00:00:00 php-fpm: pool www

www 2432 2424 0 09:17 ? 00:00:00 php-fpm: pool www

www 2433 2424 0 09:17 ? 00:00:00 php-fpm: pool www

www 2434 2424 0 09:17 ? 00:00:00 php-fpm: pool www

www 2435 2424 0 09:17 ? 00:00:00 php-fpm: pool www

开启12个php-cgi进程消耗掉240M内存(20M * 12 = 240M)

测试流程

首先启动队列网络服务,php向队列服务里插入一条insert sql,例如

client.php

复制代码

1 /**

2 * socket client

3 * a NULL填充字符串

4 * n 表式无符号短整形

5 * 无符号短整型, 总是16点,大端字节序

6 */

7 function insert_queue($cmd, $sql) {

8 $s = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

9 try {

10 socket_connect($s, "127.0.0.1", 8888);

11 $list = json_encode(array(

12 "sql"=>$sql

13 ));

14 $len = strlen($list);

15 $param = pack("nna{$len}",$cmd, $len, $list);

16 socket_write($s, $param, strlen($param));

17 socket_recv($s, $head, 4, 0);

18 //var_dump($head);

19 if($head != '') {

20 $a = unpack("ncmd/nlen", $head);

21 $cmd = $a['cmd'];
22 $len = $a['len'];

23 if($cmd == 8001) {

24 socket_recv($s, $body, $len, 0);

25 //echo $body;exit;

26 $b = json_decode($body, true);

27 socket_close($s);

28 return $b;

29 }

30 }

31 socket_close($s);

32 } catch(Exception $e) {

33 echo $e->getMessage();

34 }

35 }

36 $temp = insert_queue(8001, "insert into (num) values (%d)");

复制代码

CircularQueue.py

复制代码

1 # !/usr/bin/python

2 # coding=utf-8

3 #

4 # @Author: LiXiaoYu

5 # @Time: 2013-11-06

6 # @Info: CircularQueue Server.

7

8 import Epoll

9 from Config import Config

10 from App.Queue.CircularQueue import CircularQueue

11

12 #获取队列服务配置

13 _config = Config("Queue")

14

15 #初始参数

16 _port = _config.get("queue.port") #服务端口

17 _app = CircularQueue()

18 #_allow_ip = ['192.168.1.100'] #白名单IP列表

19

20 #开始服务

21 s = Epoll.createServer(_app)

22 #s.setAllowIp(_allow_ip)

23 s.listen(_port)

24 2881064151

25 启动服务

26 python3 circularQueue.py

复制代码

测试工具

使用webbench模拟1万并发

webbench -c 10000 -t 30 http://192.168.1.100/client.php

测试结果

lxy@lenovo-pc:~$ webbench -c 10000 -t 30 http://localhost/client.php

Webbench - Simple Web Benchmark 1.5

Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.1.100/client.php

10000 clients, running 30 sec.

Speed=43226 pages/min, 129975 bytes/sec.

Requests: 21613 susceed, 0 failed.

每分钟相应请求数43226 pages/min,每秒钟传输数据量129975 bytes/sec

php向队列服务里插入一条insert sql例如的更多相关文章

  1. mybatis笔记之一次插入多条数据sql语句写法

    <insert id="insertList" parameterType="java.util.List"> insert into balanc ...

  2. mybatis用mysql数据库自增主键,插入一条记录返回新增记录的自增主键ID

    今天在敲代码的时候遇到一个问题,就是往数据库里插入一条记录后需要返回这个新增记录的ID(自增主键), 公司框架用的是mybatis的通用Mapper接口,里面的插入方法貌似是不能把新纪录的ID回填到对 ...

  3. 跟我一起学WCF(11)——WCF中队列服务详解

    一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务队列的方法来支持客户端 ...

  4. 【阿里云产品公测】消息队列服务MQS java SDK 机器人应用初体验

    [阿里云产品公测]消息队列服务MQS java SDK 机器人应用初体验 作者:阿里云用户啊里新人   初体验 之 测评环境 由于MQS支持外网访问,因此我在本地做了一些简单测试(可能有些业余),之后 ...

  5. 转:基于HTTP协议的轻量级开源简单队列服务:HTTPSQS

    [文章作者:张宴 本文版本:v1.7.1 最后修改:2011.11.04 转载请注明原文链接:http://blog.zyan.cc/httpsqs/] HTTPSQS(HTTP Simple Que ...

  6. WCF中队列服务详解

    WCF中队列服务详解 一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务 ...

  7. 基于HTTP协议的轻量级开源简单队列服务:HTTPSQS[转]

    HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key ...

  8. NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例

    一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...

  9. Redis作为消息队列服务场景应用案例

    NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例   一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...

随机推荐

  1. poj3904

    题意:给出n(n<10000)个数,这些数<=10000,要求选出四个数字且他们的最大公约数为1的(注意:不需要两两互质),有多少种选法. 分析: 容斥原理 假设平面上有一些圆,互相之间有 ...

  2. swift 中String,Int 等类型使用注意,整理中

    swfit中的String和Int是 struct定义的,不同于NSString和NSNumber, 如果想在一个数组中同时包含String和Int,那么这个数组要声明为[Any] 而不是 [AnyO ...

  3. Cocos2d 中的Sprite大小调整问题

    以前用UIImageView,比如  UIImageView *view = [[UIImageViewalloc] initWithImage:[UIImageimageNamed:@"b ...

  4. 简单的2d图形变换--仿设变换AffineTransform

    在ios中常常遇到些小的动画效果,比如点击一个按钮后,按钮上的三角形图片就旋转了.这种简单的小动画,常常通过更改view的transform属性来实现.这个transform属性,就是一个仿射变化矩阵 ...

  5. Paths on a Grid(poj 1942)

    给定一个矩形网格的长m和高n,其中m和n都是unsigned int32类型,一格代表一个单位,就是一步,求从左下角到右上角有多少种走法,每步只能向上或者向右走. //注意循环的时候,要循环小的数,否 ...

  6. opencv学习笔记(七)SVM+HOG

    opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...

  7. yum_rpm(利用dvd建立本地yum库)

    #wget "http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os" 建立起了index.html ...

  8. mysql中char,varchar,text区别总结

    具体对这三种类型的说明不做阐述可以查看mysql帮助文档. char的总结:      char最大长度是255字符,注意是字符数和字符集没关系.可以有默认值,尾部有空格会被截断.varchar的总结 ...

  9. HTML CSS 中DIV内容居中汇总

    转载博客(http://www.cnblogs.com/dearxinli/p/3865099.html) (备注:DIV居中情况,网上谈到也比较多,但是这篇文字,相对还是挺全面,现转载,如果冒犯,还 ...

  10. h5 canvas 小球移动

    h5 canvas 小球移动 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...