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. Linux系统排查1——内存篇

    常见工作中,计算机系统的资源主要包括CPU,内存,硬盘以及网络,过度使用这些资源将使系统陷入困境.本系列一共四篇博文,结合我在实习期间的学习,介绍一些常见的Linux系统排障工具及方法. 第1篇——内 ...

  2. Java for LeetCode 035 Search Insert Position

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  3. 各大OJ

    北大POJ 杭电HDU 浙大ZOj 蓝桥杯 PAT

  4. hibernate的sqlQuery自动封装

    1.Query query = session.createSQLQuery("SQL").addEntity(Tree.class); //返回对象   List  list = ...

  5. android 搭建环境工具

    ---恢复内容开始--- 一.下载jdk 1.JDK可以去sun的官方网站下载Java SE Development Kit 6  http://java.sun.com/javase/downloa ...

  6. LightOJ 1079 Just another Robbery 概率背包

    Description As Harry Potter series is over, Harry has no job. Since he wants to make quick money, (h ...

  7. 2016"百度之星" - 初赛(Astar Round2A) 1004 D Game 区间DP

    D Game Problem Description   众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它发明了一个游戏:D游戏. 度度熊的英文并不是很高明,所以这里的D,没什么高深的含义,只 ...

  8. Android Studio 导入外部lib文件

    Android Studio 导入外部lib文件   1.将jar包放入Module里的lib文件夹中.(自己创建lib文件夹) 2.在project选中jar包点击右键"Add as li ...

  9. Android 编程下判断当前设备是手机还是平板

    /** * 判断当前设备是手机还是平板,代码来自 Google I/O App for Android * @param context * @return 平板返回 True,手机返回 False ...

  10. Redis Set 命令

        1.Set set是string类型的无序集合,其参考来源应该属于STL中的Set.   •set元素最大可以包含(2的32次方-1)个元素. •set的是通过hash table实现的,ha ...