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

    第五次作业的重点是服务器端的开发...

    很不幸...我对于这玩意一无所知...原来做的移动智能终端——服务器式数字家庭实例这个程序用的是serv-u这个自动搭建的服务器...

    但又很幸运...我的小伙伴王文涛对于服务器来说比较在行...于是这次主要由他开发程序...我给他打下手...

    他喜欢用python这种语言...对我来说却是门全新的语言...只能帮他改改bug神马的...

    当然自己也试着读了读python的代码...

    发现还是能看得懂的...

    主界面与主功能...计算黄金数字:

     1 def index_page():
     2     for i in list(data.db.select('users')):
     3         print i['id']
     4     time.sleep(10)
     5     for i in list(data.db.select('users')):
     6         data.users[i['id']]=0.0
     7     while True:
     8         start=time.time()
     9         data.thisturn={}
    10         data.num=0
    11         data.total=0
    12         time.sleep(0.9)
    13         if data.num!=0:
    14             average=data.total/data.num*0.618
    15             print average
    16             data.thisturn['winner']=score(data.thisturn,data.users,average)
    17             data.winner=data.thisturn['winner']
    18             data.winnernumber=data.thisturn[data.winner]
    19             data.thisturn['result']=average
    20             data.goldpoint.append(average)
    21         t=1-(time.time()-start)
    22         time.sleep(t)
    23         print data.num
    24         data.turn+=1
    View Code

    判断胜负与加减分:

     1 def score(thisturn,users,average):
     2     value_max=0
     3     value_min=100
     4     for i in thisturn:
     5         a=abs(thisturn[i]-average)
     6         if a>value_max:
     7             value_max=a
     8             max_num=i
     9         if a<value_min:
    10             value_min=a
    11             winner=i
    12     for i in list(data.db.select('users')):
    13         if i['id'] not in thisturn and i['id']!=winner:
    14             users[i['id']]-=5
    15         elif i['id']==winner:
    16             users[i['id']]+=10
    17         elif i['id']==max_num:
    18             users[i['id']]-=1
    19     return winner
    View Code

    用户注册:

     1 class attend:
     2     def GET(self):
     3         form=attendform()
     4         return render.attend(form)
     5     def POST(self):
     6         form=attendform()
     7         if not form.validates():
     8             return render.attend(form)
     9         else:
    10             i=web.input()
    11             i.num=string.atof(i.num)
    12             data.num+=1
    13             data.total+=i.num
    14             data.thisturn[i.id]=i.num
    15             return 0
    16 
    17 class register:
    18     def GET(self):
    19         form=registerform()
    20         return render.register(form)
    21     def POST(self):
    22         form=registerform()
    23         if not form.validates():
    24             return render.register(form)
    25         else:
    26             i=web.input()
    27             data.db.insert('users',id=i.id,pd=0)
    28             data.users[i.id]=0.0
    29             return 0
    View Code

    这大概就是服务器端的主体了...其实这些具体功能与逻辑很好理解...对我来说困难的就是python这门语言...以及服务器该如何调用各种接口...

    我的主要任务是客户端的开发,由于在C#中,我没有百度到如何上传数据到url的办法,因此我选择使用刚学的ruby进行开发。

     1 require "net/http"
     2 params = Hash.new
     3 params[:id] = ARGV[0]
     4 addr = "http://192.168.1.150:8080"
     5 while true
     6     params[:num] = rand(100) + 1
     7     uri = URI.parse(addr + "/attend")
     8     res = Net::HTTP.post_form(uri, params)
     9     puts res.body
    10     sleep(1+ 0.2*rand(100)/100)
    11 end
    View Code

    首先需要调用"net/http"库,可以使用语句res = Net::HTTP.post_forri, params)将params的ID数据、num数据上传至url。

    sleep(1+ 0.2*rand(100)/100)此处运用一个随机均匀算法,保证每个进程的提交时间尽量不冲突,保证了只有小部分情况使得用户提交不上去。

     1 n = 20
     2 id = Array.new(n)
     3 thread = Array.new(n)
     4 1.upto(n) do |x|
     5     id[x] = x.to_s
     6     puts id[x]
     7     thread[x] = Thread.new { system "ruby client.rb #{id[x]}"}
     8 end
     9 1.upto(n) do |x|
    10     thread[x].join
    11 end
    View Code

    主函数重复调用n次client,我将用户ID定为执行的顺序,并挨个执行命令"ruby client.rb #{id[x]}"。

    最后效果还是有的...

    就是这样了...特别感谢余锋伟的帮忙...

  • 相关阅读:
    近两年目标
    Spring使用ajax异步上传文件
    java注解
    js 点击文本框,预览选择图片
    修改服务器系统时间(包括hive)
    队列原理
    EMR目录
    2个CDH的hive数据同步
    CDH建表字符集问题
    EMR的fair-scheduler.xml
  • 原文地址:https://www.cnblogs.com/yimingzou/p/3405713.html
Copyright © 2011-2022 走看看