博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
homework-05
阅读量:6691 次
发布时间:2019-06-25

本文共 3155 字,大约阅读时间需要 10 分钟。

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

很不幸...我对于这玩意一无所知...原来做的移动智能终端——服务器式数字家庭实例这个程序用的是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=011         data.total=012         time.sleep(0.9)13         if data.num!=0:14             average=data.total/data.num*0.61815             print average16             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']=average20             data.goldpoint.append(average)21         t=1-(time.time()-start)22         time.sleep(t)23         print data.num24         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
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+=113             data.total+=i.num14             data.thisturn[i.id]=i.num15             return 016 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.029             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.body10     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].join11 end
View Code

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

最后效果还是有的...

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

转载于:https://www.cnblogs.com/yimingzou/p/3405713.html

你可能感兴趣的文章
面试问题总结
查看>>
HTML特殊转义字符列表
查看>>
2、NIO--缓冲区(Buffer)
查看>>
3、集合--AbstractCollection、AbstractList源码
查看>>
如何较为直观的打印二叉树
查看>>
2014年计划:
查看>>
USACO习题:Broken Necklace
查看>>
打包命令
查看>>
POJ 1679 The Unique MST 【最小生成树/次小生成树模板】
查看>>
什么是动态链接库
查看>>
mysqldump 定时任务 执行后备份的文件为空
查看>>
Python-Django 模型层-单表查询
查看>>
Windows Redis默认配置文件,Redis配置不生效解决方案
查看>>
oracle-------window安装
查看>>
I/O完成端口、异步I/O、APC和线程池(四)——线程池
查看>>
获取Java程序运行的路径 | 获取当前jar包的路径
查看>>
摆脱京城贵妇unittest的骚套路discover,自定义用例执行顺序。
查看>>
selenium webdriver 学习笔记(二)
查看>>
GridView数据绑定控件的模版列时设置显示的格式
查看>>
在SQL SERVER中实现RSA加解密函数(第一版)
查看>>