免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10498 | 回复: 10

php写tcp服务器怎么样? [复制链接]

论坛徽章:
0
发表于 2011-11-19 21:01 |显示全部楼层
我看了下php的pctnl库好像支持多进程而且还支持select、epoll等IO模型,不知道php做的服务端效果怎么样,有谁试过吗?

论坛徽章:
0
发表于 2011-11-20 12:29 |显示全部楼层
这个不是php的强项啊。

用socket 可以写值守程序的。

论坛徽章:
0
发表于 2011-11-20 13:40 |显示全部楼层
回复 2# maochanglu


    不见得啊 它既然有这个功能 肯定有它的存在价值 我希望能把它发挥出来

论坛徽章:
0
发表于 2011-11-22 11:02 |显示全部楼层
可以应付普通应用,php的有些网络库也引入了libevent

论坛徽章:
0
发表于 2011-11-22 23:54 |显示全部楼层
回复 4# bs


有两问?
一、 一个php的版webgame server 可不可以fork多个进程去监听同一个端口呢,如果可以大概能撑多少个人同时在线(进程不挂掉就ok)?
二、如果采用单一进程绑定事件的方式,能撑多少?
有木试过?

论坛徽章:
0
发表于 2011-11-23 14:42 |显示全部楼层
回复  bs


有两问?
一、 一个php的版webgame server 可不可以fork多个进程去监听同一个端口呢,如果 ...
lijianjunljj 发表于 2011-11-22 23:54



可以fork多个进程

  1. <?php   
  2. $socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
  3. if (!$socket)
  4.   throw new Exception("$errstr ($errno)<br />\n");

  5. // 生成子进程
  6. $pid = pcntl_fork();
  7. if ($pid == -1) {
  8.      die('could not fork');
  9. } else if ($pid) {
  10.      loop($socket , 1);
  11.      pcntl_wait($status);
  12. } else {
  13.      loop($socket , 2);
  14. }


  15. function loop($socket , $id) {
  16.     while ($conn = stream_socket_accept($socket)) {
  17.             /*
  18.             $data = '';
  19.             while(($c=fgetc($read_sock))!==false && $c!="\0" && $c!="\n" && $c!="\r"){
  20.                 $data .= $c;
  21.             }*/
  22.             fwrite($conn, "Server ID :   $id , hello!\n");
  23.             fclose($conn);
  24.     }

  25.     fclose($socket);
  26. }


复制代码
另外你可以试试php异步IO+消息列队+producer/consumer模型,至于可用性不敢保证,性能方面应该不会太差,之前是有PHP的web server的开源产品。

论坛徽章:
0
发表于 2014-07-11 00:08 |显示全部楼层
用swoole把,C扩展实现的PHP多线程异步Server。
http://www.swoole.com/

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
发表于 2014-07-11 09:10 |显示全部楼层
swoole vs nodejs有人测试过性能吗?

论坛徽章:
0
发表于 2014-07-11 13:49 |显示全部楼层
回复 1# lijianjunljj


可以使用swoole轻松实现 http://bbs.chinaunix.net/thread-4145582-1-1.html

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
发表于 2014-07-12 19:35 |显示全部楼层
yum 安装 swoole出错 
yum install php-pecl-swoole

Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
* base: mirrors.btte.net
* epel: ftp.jaist.ac.jp
* extras: mirrors.btte.net
* remi: rpms.famillecollet.com
* remi-test: rpms.famillecollet.com
* updates: mirrors.btte.net
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package php-pecl-swoole.i686 0:1.7.3-1.el6.remi.5.4 will be installed
--> Processing Dependency: php(zend-abi) = 20100525-x86-32 for package: php-pecl-swoole-1.7.3-1.el6.remi.5.4.i686
--> Processing Dependency: php(api) = 20100412-x86-32 for package: php-pecl-swoole-1.7.3-1.el6.remi.5.4.i686
--> Processing Dependency: php-sockets(x86-32) for package: php-pecl-swoole-1.7.3-1.el6.remi.5.4.i686
--> Processing Dependency: /usr/bin/pecl for package: php-pecl-swoole-1.7.3-1.el6.remi.5.4.i686
--> Processing Dependency: /usr/bin/pecl for package: php-pecl-swoole-1.7.3-1.el6.remi.5.4.i686
--> Running transaction check
---> Package php-common.i686 0:5.4.30-1.el6.remi will be installed
---> Package php-pear.noarch 1:1.9.5-0.1.el6.remi will be installed
--> Processing Dependency: php-xml for package: 1:php-pear-1.9.5-0.1.el6.remi.noarch
--> Processing Dependency: php-posix for package: 1:php-pear-1.9.5-0.1.el6.remi.noarch
--> Processing Dependency: php-cli for package: 1:php-pear-1.9.5-0.1.el6.remi.noarch
--> Running transaction check
---> Package php-cli.i686 0:5.5.15-0.1.RC1.el6.remi will be installed
--> Processing Dependency: php-common(x86-32) = 5.5.15-0.1.RC1.el6.remi for package: php-cli-5.5.15-0.1.RC1.el6.remi.i686
--> Processing Dependency: libssl.so.10(libssl.so.10) for package: php-cli-5.5.15-0.1.RC1.el6.remi.i686
--> Processing Dependency: libcrypto.so.10(libcrypto.so.10) for package: php-cli-5.5.15-0.1.RC1.el6.remi.i686
--> Processing Dependency: libcrypto.so.10(OPENSSL_1.0.1_EC) for package: php-cli-5.5.15-0.1.RC1.el6.remi.i686
--> Processing Dependency: libcrypto.so.10(OPENSSL_1.0.1) for package: php-cli-5.5.15-0.1.RC1.el6.remi.i686
---> Package php-process.i686 0:5.5.15-0.1.RC1.el6.remi will be installed
---> Package php-xml.i686 0:5.5.15-0.1.RC1.el6.remi will be installed
--> Running transaction check
---> Package openssl.i686 0:1.0.0-20.el6_2.5 will be updated
---> Package openssl.i686 0:1.0.1e-16.el6_5.14 will be an update
---> Package php-common.i686 0:5.4.30-1.el6.remi will be installed
--> Processing Dependency: php-pecl-zip(x86-32) for package: php-common-5.5.15-0.1.RC1.el6.remi.i686
--> Processing Dependency: php(zend-abi) = 20100525-x86-32 for package: php-pecl-swoole-1.7.3-1.el6.remi.5.4.i686
--> Processing Dependency: php(api) = 20100412-x86-32 for package: php-pecl-swoole-1.7.3-1.el6.remi.5.4.i686
---> Package php-common.i686 0:5.5.15-0.1.RC1.el6.remi will be installed
--> Processing Dependency: php-pecl-zip(x86-32) for package: php-common-5.5.15-0.1.RC1.el6.remi.i686
--> Processing Dependency: php-pecl-jsonc(x86-32) for package: php-common-5.5.15-0.1.RC1.el6.remi.i686
--> Running transaction check
---> Package php-common.i686 0:5.4.30-1.el6.remi will be installed
--> Processing Dependency: php-pecl-zip(x86-32) for package: php-common-5.5.15-0.1.RC1.el6.remi.i686
--> Processing Dependency: php(zend-abi) = 20100525-x86-32 for package: php-pecl-swoole-1.7.3-1.el6.remi.5.4.i686
--> Processing Dependency: php(zend-abi) = 20100525-x86-32 for package: php-pecl-jsonc-1.3.5-1.el6.remi.5.4.i686
--> Processing Dependency: php(api) = 20100412-x86-32 for package: php-pecl-swoole-1.7.3-1.el6.remi.5.4.i686
--> Processing Dependency: php(api) = 20100412-x86-32 for package: php-pecl-jsonc-1.3.5-1.el6.remi.5.4.i686
---> Package php-common.i686 0:5.5.15-0.1.RC1.el6.remi will be installed
--> Processing Dependency: php-pecl-zip(x86-32) for package: php-common-5.5.15-0.1.RC1.el6.remi.i686
---> Package php-pecl-jsonc.i686 0:1.3.5-1.el6.remi.5.4 will be installed
--> Processing Dependency: php(zend-abi) = 20100525-x86-32 for package: php-pecl-jsonc-1.3.5-1.el6.remi.5.4.i686
--> Processing Dependency: php(api) = 20100412-x86-32 for package: php-pecl-jsonc-1.3.5-1.el6.remi.5.4.i686
--> Finished Dependency Resolution
Error: Package: php-common-5.5.15-0.1.RC1.el6.remi.i686 (remi-test)
           Requires: php-pecl-zip(x86-32)
           Available: php-common-5.4.29-3.el6.remi.i686 (remi)
               php-pecl-zip(x86-32) = 1.11.0
           Available: php-common-5.4.30-1.el6.remi.i686 (remi)
               php-pecl-zip(x86-32) = 1.11.0
           Available: php-common-5.3.3-26.el6.i686 (base)
               Not found
           Available: php-common-5.3.3-27.el6_5.i686 (updates)
               Not found
           Installing: php-common-5.5.15-0.1.RC1.el6.remi.i686 (remi-test)
               Not found
Error: Package: php-pecl-swoole-1.7.3-1.el6.remi.5.4.i686 (remi)
           Requires: php(zend-abi) = 20100525-x86-32
           Available: php-common-5.3.3-26.el6.i686 (base)
               php(zend-abi) = 20090626
           Available: php-common-5.3.3-27.el6_5.i686 (updates)
               php(zend-abi) = 20090626
           Available: php-common-5.4.29-3.el6.remi.i686 (remi)
               php(zend-abi) = 20100525-x86-32
           Available: php-common-5.4.30-1.el6.remi.i686 (remi)
               php(zend-abi) = 20100525-x86-32
           Installing: php-common-5.5.15-0.1.RC1.el6.remi.i686 (remi-test)
               php(zend-abi) = 20121212-32
Error: Package: php-pecl-swoole-1.7.3-1.el6.remi.5.4.i686 (remi)
           Requires: php(api) = 20100412-x86-32
           Available: php-common-5.3.3-26.el6.i686 (base)
               php(api) = 20090626
           Available: php-common-5.3.3-27.el6_5.i686 (updates)
               php(api) = 20090626
           Available: php-common-5.4.29-3.el6.remi.i686 (remi)
               php(api) = 20100412-x86-32
           Available: php-common-5.4.30-1.el6.remi.i686 (remi)
               php(api) = 20100412-x86-32
           Installing: php-common-5.5.15-0.1.RC1.el6.remi.i686 (remi-test)
               php(api) = 20121113-32
Error: Package: php-pecl-jsonc-1.3.5-1.el6.remi.5.4.i686 (remi)
           Requires: php(zend-abi) = 20100525-x86-32
           Available: php-common-5.3.3-26.el6.i686 (base)
               php(zend-abi) = 20090626
           Available: php-common-5.3.3-27.el6_5.i686 (updates)
               php(zend-abi) = 20090626
           Available: php-common-5.4.29-3.el6.remi.i686 (remi)
               php(zend-abi) = 20100525-x86-32
           Available: php-common-5.4.30-1.el6.remi.i686 (remi)
               php(zend-abi) = 20100525-x86-32
           Installing: php-common-5.5.15-0.1.RC1.el6.remi.i686 (remi-test)
               php(zend-abi) = 20121212-32
Error: Package: php-pecl-jsonc-1.3.5-1.el6.remi.5.4.i686 (remi)
           Requires: php(api) = 20100412-x86-32
           Available: php-common-5.3.3-26.el6.i686 (base)
               php(api) = 20090626
           Available: php-common-5.3.3-27.el6_5.i686 (updates)
               php(api) = 20090626
           Available: php-common-5.4.29-3.el6.remi.i686 (remi)
               php(api) = 20100412-x86-32
           Available: php-common-5.4.30-1.el6.remi.i686 (remi)
               php(api) = 20100412-x86-32
           Installing: php-common-5.5.15-0.1.RC1.el6.remi.i686 (remi-test)
               php(api) = 20121113-32
swoole是不是对对php版本有要求,这现在的是php5.4
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP