免费注册 查看新帖 |

Chinaunix

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

关于PHP搭建SocketServer, 高手进. [复制链接]

论坛徽章:
0
1 [报告]
发表于 2010-02-21 00:03 |只看该作者
嗯,考虑到php同时轮询150个请求,整个监听无非就是while(true){... usleep();...}的结构,不过一旦有耗时(如数据库)操作将会影响整个游戏的流畅。

可考虑采用同时启动多个PHP程序监听多个端口方式,并配合共享内存,这样应该会好一些。

论坛徽章:
0
2 [报告]
发表于 2010-02-21 08:56 |只看该作者
不建议这么做

php单进程socket应该是无法实现并发访问的,而且即使新建进程它的开销也很大

最好的办法就是webserver层自行开发,以cgi/fast-cgi方式连接php进行逻辑处理
http://bbs.chinaunix.net/thread-1632957-1-1.html

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
3 [报告]
发表于 2010-02-21 09:09 |只看该作者
本帖最后由 shang2010 于 2010-02-21 09:16 编辑

回复 2# bs


    我FP的不是LS,是传说

看来懂点C/CPP再做PHP还是很有必要的呀

论坛徽章:
0
4 [报告]
发表于 2010-02-22 00:07 |只看该作者
本帖最后由 a_coder 于 2010-02-22 00:12 编辑

阿哦. 两边都是你哈~

怎么说呢. 我不考虑fork进程来做. 一方面他限制在linux, 另一方面, 每一个用户进来都fork进程这实在是有点杀鸡用牛刀的感觉. 毕竟棋牌游戏的逻辑已经简单的不能再简单了. 就是数字大小的判断.

PHP虽然不支持多线程. 但是考虑一下, 既然PHP有非阻塞得socket. 那么轮巡150人的话, 应该是相当快了. 毕竟棋牌游戏没有多少需要传输的数据, 而且在非阻塞状态下, 简单的150人轮巡都是毫秒级的, 缓冲区应该不会被严重阻塞. 而服务器要做的无非就是一个分配游戏桌/登录/发牌/牌面验证. 这里面只有在登录的时候需要数据库处理, 但如果服务端额外的进程来处理这个, 那么他也是一个非阻塞的形式. 在登录服务器处理完成之后返回数据给大厅服务器, 数据中包含处理结果/socket id/回调函数. 其他部分的逻辑都是内存操作, 也都是简单的加减法运算. 没有复杂的逻辑处理. 在游戏结束的时候涉及的数据库操作也跟登录有相同的原理. 同样并不阻塞操作. 如果这样, 及时不存在多线程, 简单的150人轮巡PHP应该可以胜任了.
服务器与客户端, 多个服务之间的通信也仅限于几十个或者几百个字节的通信. 你觉得如果变量的释放作的足够好, 那么PHP能够胜任这一工作么. 每个服务阵列支持150人. 单台服务器运行3个阵列支持450-500人.

这不比你们的大型RPG, 那个数据量很大, 人数很多. 用php来做socket显然不可能. php5.2.x版本在目前看来已经是一个巅峰之作了. 各方面性能都比之前的4.4.x强了很多. 上面所说的游戏逻辑, 我觉得php应该足以胜任了吧?

两张帖子回复都一样. 看了一个就别去另外那边了.

论坛徽章:
0
5 [报告]
发表于 2010-02-22 13:25 |只看该作者
已经有人用php写过web服务器 在linux下是可以跑多进程的

论坛徽章:
0
6 [报告]
发表于 2010-02-22 14:29 |只看该作者

论坛徽章:
0
7 [报告]
发表于 2010-02-23 03:57 |只看该作者
本帖最后由 a_coder 于 2010-02-23 04:04 编辑

PHP的多进程也只是限制在linux下面. 而且感觉fork进程消耗的资源更多一些.

拿游戏结束的积分结算来说, 其实就是 (客户端) ---> (游戏服务) ---> (数据库服务)  这样进行. 这样就相当于实现了数据库查询的非阻塞. 在结果返回read的时候调用回调函数.

我写一个出来试试看了. 期待PHP的表现.

nano那个服务器我看过, 不过http的请求是短连接. fork进程处理请求也还可以. 如果是长连接, 然后每一个连接都要fork一个进程, 这个瓶颈就太明显了.


PS: 版主哈, 能不能给我在phpchina弄一个PHP Experts组的权限.

论坛徽章:
0
8 [报告]
发表于 2010-02-23 09:04 |只看该作者
PHP的多进程也只是限制在linux下面. 而且感觉fork进程消耗的资源更多一些.

拿游戏结束的积分结算来说, 其 ...
a_coder 发表于 2010-02-23 03:57



期待结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP