看了个MUD的源代码的感受,路过的进来看看,谈谈,都有分(刚给出去100呢)

Megadeth 2003-02-04 11:48:28
今天闲着没事,看了些源代码。当然,不可能全看完了,因为那些代码竟然没有注释!下面谈谈我的感受,希望大家有看法和意见的尽情说:

一直想写一个服务器端在linux下的网络游戏,可惜不知道该使用什么技术(因为方法太多了,呵呵):

有的书上推荐用进程!不可能给每个用户一个进程吧?又不是apache,嗬嗬,不过,有谁研究过,用进程的话,到底能处理几个用户?

有的书上推荐线程,这里要问一句,linux下的线程效率到底如何,不要总是回答比进程开销小,用线程的话,又能撑几个客户呢?

书上最不推荐的就是select了,解释为:因为它是单进程处理的,不稳定,且编程复杂。真是这样的吗?但是我个人觉得他效率最高啊!编程也不复杂,很容易模拟成我们熟悉的消息循环。

本来想来个进程里套入线程的模型,可惜怕撑不住很多的客户端,这里又有一个问题,可不可能线程或进程里套入select呢(只是个天真的想法,不要取笑)?如果可能的话,要用个怎样的模型呢?描述一下吧。

实际上我从未做过真正的网络游戏,所以没有经验,如果有人做过的话,那就再好不过了,说说模型系统来听听。
...全文
1083 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
jia421 2003-02-18
  • 打赏
  • 举报
回复
關注……
zhhuang2002 2003-02-18
  • 打赏
  • 举报
回复
线程效率高且可创建很多;而进程效率低不能太多;至于select一般用得不多。我觉得不妨为将应用分为若干进程,各进程为每个请求创建线程进行处理.
lovek666 2003-02-17
  • 打赏
  • 举报
回复
走过路过不要错过 来蹭分的
Megadeth 2003-02-16
  • 打赏
  • 举报
回复
非常感谢各位的建议!!!(这几天实习去了,一直没上网,sorry先)

我说一下我现在的构想,请大家帮忙参考一下:
现在的想法是:多线程+select
线程的作用就是处理消息(自己封装一个消息机制),比如,有一个gameloop在select,然后发消息给线程,线程就相应的处理read/write,读写的时候用阻塞模式,还有一个进程在检测是否有线程阻塞超时(线程不能用alerm吧),
有的话就发个信号过去把它kill了。
linux6.2中一个进程可以创建1022个线程,我实际测的,用楼上mikespook(Mike大懒猫) 的方法通过多进程管理线程,那就可以更多了,但是,正如whoke(hy) 说的,fd不能太多,那人数还是不能太多,在这里想问一句,一般网络游戏会有多少人同时在线?有什么办法可以多select几个fd吗?非常希望能继续与各位高手探讨!
另外,satanmonkey(撒旦)能在详细说一下你的想法吗?怎么实现呢?
如果各位嫌分不够,那我躲开几个贴子来送分(我还剩500分的)
qiao_feng2002 2003-02-15
  • 打赏
  • 举报
回复
关注!
AirHunter 2003-02-15
  • 打赏
  • 举报
回复
理论上讲可以采取这样的方法,先建立一个通讯进程来处理所有的上下行数据,然后建立一个监控进程,监控后台处理进程,然后由后台处理进程建立数个后台处理进程,用户登陆的数据放在内存共享区域里面,用户的上下行信息也建立相应的内存共享区或消息队列。

通信进程流程
读取上行数据-〉放入上行队列-〉读取下行队列-〉写入下行数据
循环进行上述过程
注意,Socket要用非阻塞式

监控进程流程
如果空闲的后台处理进程少于预定值则建立新的后台处理进程,
如果空闲的后台处理进程多于预定值则杀死多余的空闲后台处理进程

后台处理进程
读取上行队列-〉处理-〉写入下行队列
如上行队列中没有数据则处于空闲状态


我没有搞过游戏,不过这个东西好象和我们现有的系统差不多!
napoleonchn 2003-02-14
  • 打赏
  • 举报
回复
刚学,不懂,只能帮忙UP
madlas 2003-02-14
  • 打赏
  • 举报
回复
楼上的老兄,原来西游记MUD是你们开发的,仰慕仰慕,可以留个QQ或是EMAIL给我吗?谢谢啦
hxd1114 2003-02-14
  • 打赏
  • 举报
回复
以前自己做过文字版的MUD(侠客行、风云、西游记等),不知道你所说的

MUD 是文字版的还是图形界面的?

yc999999999 2003-02-14
  • 打赏
  • 举报
回复
我喜欢玩网络游戏,从文字mud到图形mud,
我不想编游戏,但我想编游戏外挂!嘿嘿……
不过可惜,还没有弄出来,希望有高手赐教,3KU了。
YHW 2003-02-13
  • 打赏
  • 举报
回复
把客户端做成无状态的,服务器端的容量就可以成倍增加
具体可以去看开发三层系统的资料。
del77 2003-02-12
  • 打赏
  • 举报
回复
在进程里用select效果还是可以的,在200个进程以下不会有什么问题。。
zalyer 2003-02-12
  • 打赏
  • 举报
回复
up
Rox_Tu 2003-02-12
  • 打赏
  • 举报
回复
如果使用Windows平台,可以使用纤程。
UNIX系统是分时系统速度的问题可以放在数据库上。
heigemen 2003-02-12
  • 打赏
  • 举报
回复
up
loneststar 2003-02-11
  • 打赏
  • 举报
回复
UP
zhangai 2003-02-11
  • 打赏
  • 举报
回复
谁要开发web游戏呀,我策划。
wangjue79710 2003-02-11
  • 打赏
  • 举报
回复
UP
whoke 2003-02-09
  • 打赏
  • 举报
回复
select受fd数量限制,不能太多.
zzwu 2003-02-09
  • 打赏
  • 举报
回复
我尝试过最简单的网络游戏的编程-五子棋游戏,但不在linux下,也不需要用线程...
加载更多回复(8)

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧