zoukankan      html  css  js  c++  java
  • homework-05

    无聊的时候怎么办? ---玩游戏吧

    玩游戏不够档次怎么办?? ---自己写游戏吧

    做不出游戏怎么办??? ---凉拌

    所以,为了防止无聊,就写个游戏吧!

    游戏内容:猜数字

    所有游戏者提交一个数字,最接近平均数*0.618者为胜

    由于是多人游戏,就会涉及到服务器与客户端的通信问题。这里我们就采用socket来实现

    一个服务器对应多个客户端,命令直接通过文本的方式传送

    为了能够更加有效的解析命令,我们就需要对传送的文本进行规范。从plain text转化成structured data。

    为了能完成文本的转换,我们可以用http传送参数的方式完成。

    {

             Para1: value1,

             Para2: value2

    }

    Para1=value1&para2=value2

    就能够互相转换了。

    于是,我们根据这个游戏的需求,就有了如下定义:

    客户端向服务器传输的:

             newplayer                  登记玩家

                       username         用户名

             submit                        提交数字

                       point                  数字

             query                           查询

                       (None)               (无)

    服务器向客户端传输的:

             newround                  新一轮

                       timeout             时限

                       count                 第几轮

                       yourpoint 客户端的分数

             confirmplayer  确认玩家

                       username         用户名

                       token                 身份口令

             confirmsubmit 确认提交

                       point                  点数

             confirmquery   确认查询

                       yourpoint 客户端的分数

                       lastg                   最后一次G点

                       lastwinner        上次胜利者

    如上协议定义好了以后,程序就呼之欲出了。

    比如我的服务器实现:

    有两个类,游戏管理器和游戏玩家:

     

    每当有玩家连入时,就创建一个新的线程,专门负责和那个玩家通信。

    客户端也是类似,一个单独的线程负责接收服务器消息即可。

    实现timeout功能就只需要服务器额外开一个线程,每sleep一段时间,调用一下game类的newRound()方法即可

    -------------------------------以上是上节课讲台上说的内容-------------以下是重点--------------------------

    压力测试:

    0个客户端:

    工作的相当正常

    大哥,敢不敢更给力点?!!

    10个客户端:

    毫无压力~

    100个来一发:

    500个客户端,也同样轻松加愉快

    800个客户端:

    还是通过。

    挑战1000个客户端!

    可是,这一次发生了错误:

    服务器端显示只有886个客户端连接进了服务器:

    而客户端则发生了错误:

    看到错误提示信息显示,不能创建新线程了。这应该就是python线程数的极限了

    结论,如果要支持上千用户数同时连入,可以考虑用c语言重写。这也给了我们一个启示:python虽然灵活方便,可是在性能上和c相比还是有些不足。如果要制作一个支持上万人同时在线的游戏,传统的高效的程序设计是必不可少的。

  • 相关阅读:
    常用Linux命令
    SQL必知必会-笔记
    【ubuntu】install openbox+tint2+bmenu on ubuntu12.04.4
    【ruby】安装Ruby
    【ruby】快速安装gems的方法
    【sinatra】设置默认的端口
    【sinatra】修改默认ip绑定
    【sinatra】结合Padrino framework
    【sinatra】安装测试
    【rails3教材】博客构建过程2
  • 原文地址:https://www.cnblogs.com/yzong/p/3405048.html
Copyright © 2011-2022 走看看