Lua
我们要明确一个前提:Lua是动态型语言,变量是不需要类型定义,只需要为变量赋值。值可以存储在变量中,最为参数传递或结果返回。一 基本类型 Lua有8个基本类型:nil、boolean、number、string、userdata、function、thread、table
1 nil 表示一个无效的值,在条件表达式中相当于false 2 boolean false和ture 3 number 表示双精度类型的实浮点数 4 string 字符串由一对双引号或单引号来表示 5 function 用C或者Lua写的函数 6 userdata 用来表示任意存储在变量中的C数据结构 7 thread 表示执行的独立线路,用于执行协同程序 8 table Lua中的表(table)其实就是一个‘关联数组’(associative arrays),数组的索引可以是数字或者是字符串。在Lua中,table的创建是通过“构造表达式”来完成,例如最简单的表达式{ ...
Lua热更新注意事项
lua热更新,是当下最成熟、最热门,也是使用最多的热更新方案,单说热更新的话,它是完美的解决方案,但要从性能上说,它其实比C#要差上不少,自然而然地,如何优化性能也就成了开发人员最头痛的问题。
本文讲从一些数据调研出发,结合一些大牛的文章,对lua中性能优化的点进行汇总。
关于热更新
相信有一定经验的游戏从业者都听说过“热更新”,想象一下你在打开农药之后,登录之前总是要检查资源包更新,时不时还要下载一些东西,这其实就是热更新了。与之相对的是整端更新,就是重新下载安装包重新安装那一种。手游嘛,一般要求快速迭代,很多游戏都是一周一个小版本,如果每更一次都要让你下一个整端,你自然不乐意,说不定就要退坑了。在每天有几十款游戏上线的当下,玩家们都被惯坏了,他们可禁不起这么折腾,所以这就是热更新的必要性。
热更新的方案选择
现在市面上常见的热更新方案,无非就那么几种,真要分类的话就两大类,lua热更新和c#热更新,c#热更新本人知之甚少,基于ILRuntime的方式只听说在性能上并不占优势,但好处是c#语言在写代码时比lua爽,如果用c#做服务器的话还能做到客户端服务器统一语言,但终归是新兴起的方 ...
wrk搭配lua脚本,个性化压测
压测工具
wrk
wrk -t2 -c10 -d10s -s wrk.lua http://www.baidu.com
apache benchmark:性能基准测试时使用
Hey:go实现的压测工具
http_load:
http_load -p 100 -s 10 urls
siege
siege -c 200 -r 10 -f baidu.url
wrk
对于一些动态构建的请求,比如:认证、校验、MD加密、http请求参数化, ab、http_load、siege都不能满足需求,倒是jmeter、wrk可以。
更多的lua示例可以参照github
wrk请求压测,调用lua分下面3个阶段:setup、running、done
wrk的全局属性, 可以直接拿到lua中使用的
wrk = {
scheme = "http",
host = "localhost",
port = nil,
method = ...
最近关于Lua的学习篇总结(一)
Contents
</div>
<h1 id="1-Lua在游戏的作用"><a href="#1-Lua在游戏的作用" class="headerlink" title="1.Lua在游戏的作用"></a>1.Lua在游戏的作用</h1><h2 id="小注意:由于我是最近新找到了一家收我的公司(刚毕业)公司是拿lua去做的游戏UI框架。所以就是在看关于lua的NGUI方面的学习,可能自我水平十分有限,所以只是个人的总结而已"><a href="#小注意:由于我是最近新找到了一家收我的公司(刚毕业)公司是拿lua去做的游戏UI框架。所以就是在看关于lua的NGUI方面的学习,可能自我水平十分有限,所以只是个人的总结而已" class="headerlink" title="小注意:由于我是最近新找到了一家收我的公司(刚毕业)公司是拿lua去做的游 ...
Lua初识
Lua初识Lua 数据类型8种基本类型:nil :表示无效值(条件表达式代表false)boolean:布尔 包含两个值:true和falsenumber: 表示双精度类型的实浮点数string: 字符串有””或者’’表示userdata: 任意存储中的C数据结构function: Lua或C编写的函数thread: 执行独立线路,执行协同程序table: 关联数据(associative arrays),索引是数字或者字符串,table的创建通过”构造表达式”来完成,最简单构造表达式{}(创建一个空表)nil1234nil:空 print(type(x)=="nil") true print(typeI(x)==nil) false 注: type(X)==nil 结果为 false 的原因是因为 type(type(X))==stringnumber1234567number类型--双精度类型(默认类型修改luaconf.h文中定义)例如:print(type(2))print(type(2.2))print(type(0.2))print(type(2e+1))p ...
Lua编程9之模块
思考并回答以下问题:1.如何创建一个模块?2.私有函数如何声明?3.return tab1必须和模块同一名称吗?4.如何引用一个模块?别名如何使用?5.原生lua文件加载路径如何查看?6.xLua加载方式是怎样的?建议的加载Lua脚本方式是什么?7.什么是自定义Loader?如何自定义Loader?
用Lua写代码不可能把所有代码都写一个文件里,不同文件之间如何引用呢?Lua中也有模块的机制,类似C#中封装的命名空间。
模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。
Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。以下为创建自定义模块 module.lua,文件代码格式如下:123456789101112131415161718192021-- 定义一个名为 module 的模块module = {}-- 定义一个常量 ...
Rainmeter Lua 脚本
用Rainmeter也快10年了,从乐此不疲得写RM项目到现在的桌面怎么简洁怎么来,期间也发布过不少下载量超六位数Skin,也没有为Rainmeter写过啥,今天写一下Lua和Rainmeter的使用,也是让大家能运用这个高级脚本写出更好的Skin。
Script(脚本)这个Measure已不是什么新的Measure了,但是几乎没有多少中使用到它。可能是它使用的脚本语言门槛比较高的缘故。Rainmeter官网中的介绍(English):
Rainmeter 官方文档
Measure=Script Measure就类似于“Plugin” Measure,可以拓展RM的功能。但脚本的编写却比Plugin(使用C++或C#编写的dll)的要简单得多。
在皮肤配置中,lua脚本语法如下:
123456[MeasureLuaScript]Measure=Script ScriptFile=MyScript.luaTableName=MyScriptTable MySetting="SomeSetting" UpdateDivider=1
我解释一下各项参数 ...
skynet lua服务
C模块的导出从skynet核心模块来看,它只认得C服务,每个服务被编译为动态库,在需要时由skynet加载。skynet提供发送消息和注册回调函数的接口,并保证消息的正确到达,并调用目标服务回调函数。其它东西,如消息调度,线程池等,对于用户来说都是透明的。
skynet服务可以由lua编写,因此skynet将C模块核心接口通过skynet/lualib-src/lua-skynet.c导出为 skynet.so提供给lua使用。在lua层,通过skynet/lualib/skynet.lua加载C模块(require "skynet.core")完成对C API的封装。主要涉及lua服务的加载和退出,消息的发送,回调函数的注册等。用户定义的lua服务通过require "skynet"的接口即可完成服务的注册,启动和退出等。关于skynet lua api可以参见skynet wiki。
skynet.lua 中,提供的比较重要的接口有:
1234567891011121314151617181920-- 注册特定类型消息的处理函数function sk ...
Evaluation measure of pose estimation
单人检测单人姿态估计的评估标准。
PCKPCK(Percentage of Correct Keypoints)正确关键点的比例。
PCK的思想是,关键点坐标pred与groundtrue之间的归一化距离小于一定阈值时,视为正确估计,以正确估计的关键点的比例作为评估标准。
从定义可以看出,PCk的变量有两个:
如何归一化
阈值是多少
以PCKh为例,PCKh采用头部长度(head segment length)作为归一化参考。
即:对于每个人
计算所有关键点pred与groundtrue之间的欧氏距离pg_length;
计算头部长度head_length;
计算归一化距离norm_length=pg_lenght/head_length;
当这个距离小于规定的阈值时,比如说0.5,则认为估计正确;否则认为错误。
参考代码:stacked hourglass network - pckh.py
在原有的nginx上面安装Openresty和lua相关的模块
突然有一天出了个需求,做文件防盗链的,而且需要通过nginx来做,这个时候必然想到了Openresty,Openresty本身其实已经安装有nginx了,但是要求在公司原有的nginx上面装一些Openresty里面的模块,这个时候就有点复杂了,但是最终还是研究出来了,庆幸啊,这里做一个笔记,以便下次安装使用。
安装openresty
下载openresty
下载地址:https://github.com/openresty/openresty/releases1wget https://github.com/openresty/openresty/releases/download/v1.13.6.1/openresty-1.13.6.1.tar.gz
编译安装
解压123tar -xvf openresty-1.13.6.1.tar.gzcd openresty-1.13.6.1
编译安装12345./configure -j2gmakegmake install
安装lua在下载openresty安装包的时候,里面其实已经依赖了lua了,只需要安装就好了
12345 ...