游戏开发论坛

 找回密码
 立即注册
搜索
查看: 13098|回复: 13

棋牌游戏服务器 房间逻辑问题

[复制链接]

3

主题

5

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2013-7-25 19:44:17 | 显示全部楼层 |阅读模式
我开发的是棋牌游戏服务器,这个棋牌 游戏里假设有150个房间,每个房间的逻辑处理函数执行完一次要花费估计10分钟,单个房间的逻辑处理相当于是个阻塞处理了。如果服务器一启动150个房间的逻辑都要跑起来,那就要开150个线程,让CPU给线程分时间片段,150个线程自动运行,150个房间的逻辑就“相当于”并行运行了,但是我只想开一个线程来处理150个房间的逻辑,但问题是每个房间逻辑处理要花费很多时间,不可能等待一个房间的逻辑处理完再处理另外一个房间的逻辑,如果只开一个线程来处理所有房间的逻辑,如何办到?请大家给个思路 越详细越好 谢谢了。

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20468
发表于 2013-7-26 10:27:13 | 显示全部楼层
你一次逻辑要跑10分钟?

能说说你逻辑10分钟都干了些什么吗?

你的逻辑可以降低到10毫秒内的CPU计算。

31

主题

257

帖子

1752

积分

金牌会员

申城谍影

Rank: 6Rank: 6

积分
1752
QQ
发表于 2013-7-26 16:43:35 | 显示全部楼层
不说你的问题,你开150个线程,这叫过度并行化,“over concurrency”

大量时间消耗在线程context切换上了。。。。。

少开些线程,保证能快点。。。。。。。

3

主题

5

帖子

19

积分

新手上路

Rank: 1

积分
19
 楼主| 发表于 2013-7-27 16:30:41 | 显示全部楼层
sea_bug 发表于 2013-7-26 10:27
你一次逻辑要跑10分钟?

能说说你逻辑10分钟都干了些什么吗?


每一个房间最多有10个在线玩家,每一个玩家都有发话时间,超过发话时间仍然没发话视为弃牌。所以服务器房间逻辑处理函数内部就有了等待玩家发话的操作,故而一次逻辑跑完要花很久时间。

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20468
发表于 2013-7-28 01:53:23 | 显示全部楼层
听起来你像是用堵塞式的运行方式。

11

主题

95

帖子

658

积分

高级会员

Rank: 4

积分
658
发表于 2013-7-28 16:04:22 | 显示全部楼层
嗯  用异步套接字模型

71

主题

1330

帖子

2585

积分

金牌会员

Rank: 6Rank: 6

积分
2585
发表于 2013-7-29 13:39:53 | 显示全部楼层
qq51931373 发表于 2013-7-27 16:30
每一个房间最多有10个在线玩家,每一个玩家都有发话时间,超过发话时间仍然没发话视为弃牌。所以服务器房 ...

如果是监视玩家是否弃牌的流程的话,用一个定时器来做比较好。定时器的时间到了以后,看看玩家有没有出牌,没有就轮到下一个。如果中间玩家出牌了,重置这个定时器。

4

主题

19

帖子

73

积分

注册会员

Rank: 2

积分
73
QQ
发表于 2013-7-30 13:38:20 | 显示全部楼层
给每个房间设置一个计时器,计时器绑定一个回调函数,在时间到之前收到处理,就重置计时器的时间,如果时间到了没有收到响应就执行回调。不要阻塞就可以啦。

31

主题

257

帖子

1752

积分

金牌会员

申城谍影

Rank: 6Rank: 6

积分
1752
QQ
发表于 2013-7-30 20:30:54 | 显示全部楼层
最简单的办法,是用消息队列。。。。。。。。

2

主题

19

帖子

182

积分

注册会员

Rank: 2

积分
182
发表于 2013-7-31 18:33:25 | 显示全部楼层
10分钟? 你疯了,玩家也快逼疯了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-26 08:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表