免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2522 | 回复: 7
打印 上一主题 下一主题

PHP的Socket-Server的进展,和一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-26 14:36 |只看该作者 |倒序浏览
目前用于验证的服务器做出来了.

他有两个进程 : 登录服务器(对外)  /  验证进程(内部).  用户提交本地数据到登陆服务器, 登录服务器发送请求给验证进程, 不等待结果直接进行下一步. 当进程返回数据的时候执行一个回调函数将结果反馈到客户端.

目前看起来还算不错. 但是有一个问题非常头疼.

我用php写了一个模拟客户端发送数据给服务, 然后用apache的ab来并发这个客户端达到压力测试的目的. 当并发达到250-300的时候, 服务器崩溃. 提示如下:

unable to select [0]: 在一个非套接字上尝试了一个操作.

我查看了官方的一个bug. 好像没有提到解决方案, 而且bug状态不在修复之列. 我测试了5.2.9和5.2.13两个版本, 都有同样的问题.

有什么解决办法么.

论坛徽章:
0
2 [报告]
发表于 2010-02-26 15:25 |只看该作者
这个好像不是php的问题,是apache 并发的问题吧


设置apache参数
ThreadsPerChild以及MaxRequestsPerChild

论坛徽章:
0
3 [报告]
发表于 2010-02-26 15:26 |只看该作者
不过恭喜楼主,初见成效

论坛徽章:
0
4 [报告]
发表于 2010-02-26 15:43 |只看该作者
我换了一个办法来测试.

  1. $i = 0;
  2. $sockets = array();
  3. while (true) {
  4.         $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  5.         if (socket_connect($socket, '192.168.1.101', 11001)) {
  6.                 socket_set_nonblock($socket);
  7.                 $sockets[] = $socket;
  8.                 $i = $i + 1;
  9.         } else {
  10.                 break;
  11.         }
  12. }
  13. echo $i;
复制代码
无论怎么执行, 那个$i永远都是257. 然后对应的php.exe就报错自动关闭...

其实257已经超出我的预想了. 但是更希望能达到500.

论坛徽章:
0
5 [报告]
发表于 2010-02-26 15:45 |只看该作者
关键我是命令行. 不经过apache的. 只有前一个测试用了apache的ab来模拟并发. LR实在是搞不明白.

论坛徽章:
0
6 [报告]
发表于 2010-02-26 17:45 |只看该作者
你在linux平台下44

论坛徽章:
0
7 [报告]
发表于 2010-03-02 16:06 |只看该作者
你的服务端代码能否简单的贴一下。光空说,怎么能看出问题。

论坛徽章:
0
8 [报告]
发表于 2010-03-02 17:41 |只看该作者
关注下。。

干嘛不用c或者c++?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP