1.应用场景

主要弄清楚设置随机数种子的方法,可用于游戏开发当中的时间种子从而产生合理的随机数,避免出现bug。

2.学习/操作

1.文档阅读

07 | 带你快速上手 Lua-极客时间

2.整理输出

2.1 什么是种子

现在很多朋友下载东西时都会用bt种子文件,那到底什么是bt种子文件呢?bt种子文件又是怎么用的呢?

种子是一个形象的比喻。其实bt种子文件就是记载下载文件的存放位置、大小、下载服务器的地址、发布者的地址等数据的一个索引文件。

这个种子文件并不是最终要下载的东西(如电影,软件,游戏等),但是要下载需要的东西,就必须先下载种子文件。种子文件的后缀名是:*.torrent。

什么是bt种子文件?

bt下载的原理,很复杂,简单说就是在下载的同时,也在上传。

BitTorrent(简称BT)是一个文件分发协议,它通过URL识别内容并且和网络无缝结合。BT首先在上传者端把一个文件分成了Z个部分,甲在服务器随机下载了第N个部分,乙在服务器随机下载了第M个部分,这样甲的BT就会根据情况到乙的电脑上去拿乙已经下载好的M部分,乙的BT就会根据情况去到甲的电脑上去拿甲已经下载好的N部分,这样就不但减轻了服务器端得负荷,也加快了用户方(甲乙)的下载速度,效率也提高了,更同样减少了地域之间的限制。比如说丙要连到服务器去下载的话可能才几K,但是要是到甲和乙的电脑上去拿就快得多了。所以说用的人越多,下载的人越多,大家也就越快,BT的优越性就在这里。而且,在下载的同时,你也在上传(别人从你的电脑上拿那个文件的某个部分),所以说在享受别人提供的下载的同时,你也在贡献。

BT把提供完整文件档案的人称为种子(SEED),正在下载的人称为客户(Client),某一个文件现在有多少种子多少客户是可以看到的,只要有一个种子,就可以放心地下载,一定能抓完。当然,种子越多、客户越多的文件抓起来的速度会越快。

「有人将原始发布信息的人成为种子,因为ta,才开出这么多的果实」

bt种子文件怎么用呢?

使用种子首先要有BT软件,然后就可以下载了!BT是一种类似与电驴的P2P共享软件,全名叫“BitTorrent”,中文全称:“比特流”,“变态”下载器是它的名字和下载率高的缘故,因此常人给它的一个化名。它是一种新的类似于P2P共享软件,因为每个下载的人同时又可以上传,下载的人越多,文件越大,速度就越快,而且只要普通的电脑接上网络就可以安装BT服务器。

目前最常用的就是迅雷下面以迅雷为例做讲解,bt种子文件的用法。

如果电脑里装了迅雷下载软件,那么只要双击bt种子文件就可以自动启用迅雷下载此种子文件所对应的文件(电影游戏等)。

或者打开迅雷,左上角部分有一个新建右面有一个倒立的黑小三角,点击一下。

出来一个打开bt种子,选择下来的种子所在的位置,就可以打开下载了。

其实就是可以类比生活中的种子:

就是可以用它来开花结果的原始的东西或者说,在它的基础上进行灌溉等一系列操作,最后得到的东西。

2.2 时间种子

时间种子就是结合时间戳得到的一个希望的结果。

通常是为了区别不同的同类事物,比如得到某类事物的ID,name等。

2.3 方案

暂时先参考

网友:HelloBug
网上有种设置随机数种子的方法:
math.randomseed(tostring(os.time()):reverse():sub(1, 6))
即将时间值转换为字符串,然后将字符串倒序,然后取其前六位作为种子。之所以这样做的原因是因为当时间变化很小的时候,产生随机数的序列很相似。所以通过这种方法使得即使时间变化很小,由于reverse操作,时间的高位变成低位,低位变成高位,随机数种子的值变化会很大。

关于这种做法有以下两个问题:

1.当前执行os.time()打印的时间是1560251897,总共十位。认为函数中使用sub(1, 6)这里取前6位的中的6并不是一个固定的值,而且并没有什么意义,直接使用math.randomseed(tostring(os.time()):reverse())就能达到想要的效果。难道有其他我没有想到的原因?

2.这样的做法并不能阻止在同一秒内产生相同的随机数序列,如执行以下代码:
math.randomseed(tostring(os.time()):reverse():sub(1, 6)) 
print(math.random()) 
print(math.random())
math.randomseed(tostring(os.time()):reverse():sub(1, 6)) 
print(math.random()) 
print(math.random())
输出结果是:
0.49256881466135
0.0046852543018758
0.49256881466135
0.0046852543018758

另一种说法是对计算机的一些操作,如键盘、鼠标操作,会产生一些随机数,这些随机数叫熵。用户可以通过读取/dev/random和/dev/urandom文件来获取这些随机数。只不过读取/dev/random时,如果文件里的熵不足时会阻塞。读取/dev/urandom时,不会阻塞,但不能保证是合适的数据(熵不足时怎么处理未测试)。关于熵的还有其他相关知识,如通过操作鼠标、键盘等可以产生熵,通过cat /proc/sys/kernel/random/entropy_avail操作可以查看有多少熵可以用等。
这样的话,通过读取/dev/urandom设置随机数种子,是一种方法,但觉得这种文件读取操作,效率太低。

另外看留言里有人说通过系统调用,利用芯片电磁噪声来生成随机数。没有搜到是哪个系统调用。

作者回复: 很详细了。如果有加密的需求,从 /dev/random 和 /dev/urandom 读取会更安全,毕竟只是 init 的时候读取一次。

网友-HelloBug
返回三个变量,前两个变量重复使用同一个虚变量的例子:
resty -e 'local function sum(a, b) return a, b, a + b end local _, _, result = sum(1, 2) print(result)'

os.time返回当前时间的秒数,如果在同一秒内设置当前时间秒数为种子,然后执行随机数生成函数,产生的随机数序列是一样的。如:
resty -e 'math.randomseed(os.time()) print(math.random()) print(math.random()) math.randomseed(os.time()) print(math.random()) print(math.random())'
输出结果是:
0.71251659032569
0.36755092546457
0.71251659032569
0.36755092546457
可以看到两次产生的随机数序列相同。
作者回复:

随机数 - 时间种子的方案与实践相关推荐

  1. 启科 QuSaaS 真随机数解决方案与 Amazon Braket 结合实践

    作者:1.丘秉宜,2.邵伟,3.黄文,4.郭梦杰 1.亚马逊云科技 HERO:2.开发者生态负责人:3.DEVOPS 工程师:4.资深研发工程师 1.概述 随机性(Randomness)是偶然性的一种 ...

  2. 连麦互动直播方案全实践2:网易云信连麦互动直播方案的演变过程

    毫无疑问直播是当前移动互联网最热门的领域之一,在超强热度的引导下直播领域也吸引了大量的商业资本.在各大直播应用万花齐放的时刻,也正是直播应用面临的真正风口.站在这个风口上,直播应用只把握好风向标,推出 ...

  3. [VB.NET]如何设置随机数的种子

    <script type="text/javascript"></script> <script type="text/javascript ...

  4. 连麦互动直播方案全实践3:网易云信连麦互动的实现方案

    毫无疑问直播是当前移动互联网最热门的领域之一,在超强热度的引导下直播领域也吸引了大量的商业资本.在各大直播应用万花齐放的时刻,也正是直播应用面临的真正风口.站在这个风口上,直播应用只把握好风向标,推出 ...

  5. 连麦互动直播方案全实践1:什么是连麦互动直播?

    毫无疑问直播是当前移动互联网最热门的领域之一,在超强热度的引导下直播领域也吸引了大量的商业资本.在各大直播应用万花齐放的时刻,也正是直播应用面临的真正风口.站在这个风口上,直播应用只把握好风向标,推出 ...

  6. openEuler Meetup 南京站 | 麒麟信安加入南京用户组,分享《CentOS原地透明迁移方案技术实践》

    11月11日下午,由openEuler 社区.江苏鲲鹏·昇腾生态创新中心主办的openEuler Meetup南京站于线上线下同步举行.本次Meetup集聚社区开发者.用户.企业伙伴.操作系统爱好者, ...

  7. 墨客科技执行董事袁英:MOAC区块链赋能实体产业的方案与实践

    文丨互链脉搏 未经授权,不得转载! [互链脉搏按] 12月14日,由中国工业和信息化部电子第五研究所指导,互链脉搏主办的"IN-Chain全球区块链峰会"将在北京香格里拉酒店隆重召 ...

  8. 【学习教程】全系统各类型工程水土保持方案编制实践技术系列

    (内容涵盖八大专题:点型项目.市政工程.线型工程.矿山工程.水利工程.取土场/弃渣场.补报项目.水土保持监测验收) [学习教程]全系统各类型工程水土保持方案编制实践技术系列 (qq.com) 课程一: ...

  9. c语言程序设计 实践教学内容,《C语言程序设计》教学改革方案与实践

    分析目前高校<C语言程序设计>课程的教学现状与存在的问题,提出改革建议和发展思路.建立实践教学新模式.优化教学内容,改革教学模式和方法,目的是激发学生学习兴趣,加强动手能力培养,将有助于学 ...

最新文章

  1. sudo apt-get install 报无法获得锁
  2. Linux 下使用命令行查看 內核版本 | 系統版本 | cpu 位數 | 內存使用
  3. MacBook(m1)配置Python注意事项(自用,持续更新)
  4. 图解TCP协议中的三次握手和四次挥手
  5. PHP源码之数组的内部实现
  6. 文献记录(part79)--光学影像序列中基于多视角聚类的群组行为分析
  7. python递归实现_Python-递归实现
  8. iOS 抓包工具 charles工具
  9. 【网站】Kiwi浏览器中文网
  10. 2PC AND 3PC
  11. 缓存LruCache简单创建和使用
  12. Rasa课程、Rasa培训、Rasa面试系列之: Rasa客户案例nib Group 保险公司
  13. 普中科技51单片机开发板
  14. 知网caj转pdf格式的方法
  15. 管理软件软件开发_管理在软件开发中的作用
  16. cf Sonya and Robots
  17. 关于Abaqus+python提取s11残余应力(按路径提取)
  18. A2DP和AVRCP 播放音视频
  19. 宿主机使用wifi时虚拟机如何连网
  20. 帆软 列表自动滚动脚本

热门文章

  1. javac不是内部或外部命令,也不是可运行的程序 或批处理文件
  2. python爬取网易云音乐歌曲
  3. 利用requests 模拟登陆csdn
  4. [经典面试题][阿里]三元组最小距离
  5. 类变量和实例变量的区别:
  6. python写一个自动识别图片提取文字
  7. python encoding报错_Python BeautifulSoup报错encoding error问题
  8. MySQL 8.0.31 新增支持SQL标准中的交集(INTERSECT)和差集(EXCEPT)表操作符
  9. 符文能量 //dp
  10. 异常检测中的三种异常:点异常、上下文异常、集合异常