- 博客(45)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 cocos studio 3.10 垂死挣扎版1.1 发布啦,带使用视频
cocos studio 3.10 垂死挣扎版v1.1视频是无声版,不是你音响坏了QQ交流群:361920466专门针对lua的版本,只有windos平台,主要修改的方面如下,1.导出方式,自定义的lua导出方式,文件小2.单个文件导出, 再也不怕卡死了3.脚本绑定,直接在编辑器里对ui文件绑定lua文件4.组件绑定,直接在编辑器里对组件绑定lua文件5....
2019-10-23 22:23:46
4497
1
原创 cocos2d-x 编译 curl 注意事项
宏定义 "CURL_STATICLIB","BUILDING_LIBCURL","NDEBUG","USE_IPV6"语言标准 "c89","cxx17"将curl代码里面的ssize_t 换成curl_ssize_t
2021-07-02 01:50:01
193
1
翻译 sol 三 C++ in Lua
先定义一个类#include <iostream>struct player {public: int bullets; int speed; player() : player(3, 100) { } player(int ammo) : player(ammo, 100) { } player(int ammo, int hitpoints) : bullets(ammo), hp(hitpoints) { } void boost(.
2021-05-13 13:40:15
664
翻译 sol2 二 教程:快速入门
断言 / 先决条件你需要在代码中包含#include<sol/sol.hpp> ,这只是一个头文件,不需要编译,但是你的lua 必须是编译可用的。断言如下:#ifndef EXAMPLES_ASSERT_HPP#define EXAMPLES_ASSERT_HPP# define m_assert(condition, message) \ do { \ if (! (condition)) { \ std::ce...
2021-05-13 01:23:08
3938
原创 sol2 一
sol2 v3.2 ,快速,简单的lua绑定教程:快速入门教程:完整版错误支持编译,二进制大小,编译时间特性功能用户类型容器线程定制特性api参考手册说明水准性能说明配置和安全例外运行时类型信息unicode转换格式构建许可证起源...
2021-05-12 18:25:47
461
转载 nodejs代理
最近搞了台阿里云给客户做服务器,但是蛋疼的GFW,让我在阿里云上npm操作举步维艰,在重试N次之后,接近崩溃边缘。于是上网四处搜索,发现有一个cnpm的方法似乎可以解决问题,但是发现cnpm上镜像好像并不齐全,而且也是各种卡住,所以这种方式也只能放弃 ,于是搜到了一篇npm使用代理的文章,顿时醒悟。首先,我们的npm包无所谓安全性,所以不要使用性能和效率更慢的htt
2017-01-05 15:39:38
835
原创 Cluster 集群
skynet 支持两种集群模式。如果你仅仅是单台物理机的计算能力不足,那么最优的策略是选用更多核心的机器,在同一进程内,skynet 可以保持最高的并行能力,充分利用物理机的多核心,远比增加物理机性价比高得多master/slave 模式当单台机器的处理能力达到极限后,可以考虑通过内置的 master/slave 机制来扩展。具体的配置方法见 Config 。
2016-09-28 00:05:46
2322
1
原创 CodeCache
skynet修改了lua的官方实现(可选),加入了一个新特性,可以让多了lua VM共享相同的函数原型1,当在同一个skynet进程中开启了大量lua VM时,这个特性可以节省不少内存,且提高了VM启动速度.这个特性的使用,对一般用户来说是透明的,它改写了Lua的辅助API luaL_loadfilex,所有直接或间接调用这个API都会受其影响.比如:loadfile,require等
2016-09-28 00:01:43
1575
原创 Config 配置
启动skynet服务器需要提供一个配置文件莫诶之文件的编写可以参考examples/config,下面是一个简单的配置文件范例:root = "./"thread = 8logger = nilharbor = 1address = "127.0.0.1:2526"master = "127.0.0.1:2013"start = "main" -- main scri
2016-09-27 18:16:28
893
原创 Coroution 协程
由于skynet框架的消息处理使用了coroution,所以不可以将lua原本的coroution API直接和skynet服务混用,否则,skynet的阻塞api(见LUAapi)将调用coroution.yield而使得用户写的coroution.resume有不可预期的返回值.并打乱skynet框架本身的处理流程.通常,你可以使用skynet.fork,skynet.wait,s
2016-09-27 16:58:59
655
原创 CriticalSection 临界区保护
同一个skynet服务中的一条消息处理中,如果调用了一个阻塞api,那么它会被挂起,挂起过程中,这个服务可以响应其他消息,这很可能造成时序问题,要非常小心处理,换句话说,一旦你的消息处理过程有外部请求,那么闲到的消息未必比厚道的消息先处理完,且每个阻塞调用之后,服务的内部状态都未必和调用前的一致(因为别的消息处理过程可能改变状态).skynet.queue模块可以帮助你回避
2016-09-27 09:36:34
499
原创 DataCenter 数据中心
datacenter 可用来在整个skynet网络做跨节点的数据共享.当你需要跨节点通讯时,虽然只要持有其他节点的地址,就可以发送消息,但地址如何获得,却是一个问题.早起的skynet提供了具名服务的特性,可以给一个服务起一个唯一的名字,用名字即可发送消息,但目前更推荐的做法是通过datacenter 或UniqueService.datacenter 类似一个全网络共享的注册
2016-09-27 09:27:27
2552
原创 DebugConsole
skynet自带了一个调式控制台服务,你需要在你的启动脚本里启动它.skynet.newservice("debug_console",8000)这里的示例是监听8000端口,你可以修改成别的端口.出于安全考虑,调试控制台只能监听本地地址127.0.0.1,所以如果需要远程使用,需要先登录到本机,然后再连接可以用telnet 或nc登录调试控制台.启动后会显示W
2016-09-27 09:15:56
1538
原创 GateServer 网关
skynet提供了一个通用模板lualib/snax/gateserver.lua来启动一个网关服务器,通过TCP连接和客户端交换数据.TCP 基于数据流,但一般我们需要以带长度信息的数据包的结构来做数据交换,gateserver做的就是这个工作,把数据流切割成包的心事转发到可以处理它的地址用法ocal gateserver = require "snax.gate
2016-09-26 16:52:27
3886
原创 Http 服务器
skynet 从 v0.5.0 开始提供了简单的 http 服务器的支持。skynet.httpd 是一个独立于 skynet 的,用于 http 协议解析的库,它本身依赖 socket api 的注入。使用它,你需要把读写 socket 的 API 封装好,注入到里面就可以工作。skynet.sockethelper 模块将 skynet 的 Socket API 封装成
2016-09-25 19:25:28
537
原创 LoginServer
skynet 提供了一个通用的登陆服务器模版 snax.loginserver 。架构先做如下定义:登陆服务器 L 。这即是本篇介绍的 LoginServer登陆点若干 G1, G2, G3 ...认证平台 A用户 C当 C 试图登陆 G1 时,它进行下列流程:C 向 A 发起一次认证请求 (A 通常是第三方认证平台),获得一个 toke
2016-09-25 19:20:35
2436
原创 LuaApi
一个基于skynet框架开发的服务器,是由若干服务构成,你可以将skynet看成一个类似操作系统的东西,而服务则可以视为操作系统下的进程.但实际上,单个skynet节点仅使用一个操作系统进程,服务间的通讯是在进程内完成的,所以性能比普通的操作系统进程间通讯要高效的多.skynet 框架是用C语言编写,所以它的服务也是用C语言开发,但框架已经提供了一个叫做snlua的用C开发的服务模块,
2016-09-25 17:37:47
596
原创 MemoryHook 内存统计
skynet默认使用了jemalloc作为内存管理模块,但这并非必须,jemalloc能带来多大好处也和实际应用有关.是否连接jemalloc参考Buildskynet实现了一个和jemalloc物管的memory hook,用来做服务占用内存的统计,可以用来在C层面分析是否有内存泄露.它的原理是为每个工作线程分配一个TLS区,在worker处理服务的消息前,先设置当前服务
2016-09-25 10:37:36
1692
原创 MongoDB 内存数据库
skynet 集成了mongo的driver,monogo_collection:findOne,mongo_collection:findAndmodify,mongo_cursor:next,mongo_client:runCommand,mongo_db:runCommand等接口会返回bson库的解析结果,对于返回需要获得某字段的类型时,使用bson.type会更严谨.bson.type会
2016-09-25 10:27:16
707
原创 MsgServer 请求回应模式
snax.msgserver 是一个基于消息请求和回应模式的网关服务器模板.它基于snax.gateserver定制,可以接收客户端发起的请求数据包,并给出对应的回应.和service/gate.lua不同,用户在使用它的时候,一个用户的业务处理不基于连接.即,它不把连接建立作为用户登录,不在连接断开时让用户登出.用户必须显式的登出系统,或是业务逻辑设计的超时机制导致登出.
2016-09-25 09:23:46
2033
原创 Multicast 组播
local mc = require "multicast"引入multicast 模块后,你可以使用skynet的组播方案,你可以自由创建一个频道,并可以向其中投递任意消息,频道的订阅者可以收到投递的消息.你可以通过new 函数来创建一个频道对象,你可以创建一个新频道,也可以利用已知的频道id绑定一个已有频道.local channel = mc.new() -
2016-09-24 17:32:54
485
原创 Profile
虽然skynet可以尽可能的利用多核计算,但要特别小心在不能并发的流程上某个环节的处理能力过低,如果在一条处理流水线上,某个服务的处理能力明显低于前一个环节,消息就很有可能堆积在这个服务的消息队列里.所以应该尽量避免设计出单点服务,不要把太多不相关的处理放在同一个服务内(因为单一服务的消息处理是不能并行的),对于复杂的系统,靠猜测找到这些瓶颈非常困难,需要利用一些分析工具,然后再从设计
2016-09-24 15:03:57
391
原创 ShareData
当你把业务拆分到多个服务中去后,数据如何共享,可能是最易面临的问题,最简单粗暴的方法是通过消息传递数据,如果A服务需要B服务中的数据,可以由B服务发送一个消息,将数据打包携带过去,如果是一份数据,很多地方都需要获得它,那么用一个服务装下这组数据,提供一组查询接口即可,DataCenter模块对此作了简单的封装.如果你仅仅需要一组只读的结构分享给很多服务,(比如一些配置数据)
2016-09-24 09:32:13
2094
原创 Snax
snax 是一个方便的skynet服务实现的简单框架.(简单是相对于skynet的api而言)使用snax服务先要在 Config 中配置snax 用于路径查找,每个snax服务都有一个用于启动服务的名字,推荐按lua的模块命名规则,但目前不推荐服务名中包含"点"(在路径搜索上尚未支持 . 与 / 的替换).在启动服务时会按查找路径搜索对应的文件.snax服务用lua编写,
2016-09-24 01:08:44
1359
原创 Socket
skynet 的C API采用异步读写,你可以使用C调用,监听一个端口,或发起一个TCP连接,单具体的操作结果要等待skynet的时间回调,skynet会把结果以PTYPE_SOCKET类型的消息发给发起请求的服务.参考skynet_socket.h在处理实际业务中,这样的API很难使用,所以又提供了一组阻塞模式的lua API用于TCP socket的读写,他是对C API的封装.
2016-09-22 17:43:13
327
原创 SocketChannel
请求回应模式是和外部服务交互时所用到的最常用模式之一,通常的协议设计方式有两种1.每个请求包对应一个回应包,由TCP协议保证时序,redis的协议就是一个典型,每个redis请求都必须有一个回应,但不必收到回应才可以发送下一个请求.2.发起每个请求时带一个唯一session标识,在发送回应时,带上这个标识,这样设计可以不要求每个请求都一定要有回应,且不必遵循先提出的请求先回应的时序,Mon
2016-09-21 20:03:19
560
原创 sproto
sproto是一套由skynet自身提供的协议,类似google protobuffers,但设计更简单,也更利于lua使用,同时还提供了一套简单的rpc方案.RPC需要一个消息包的主体格式,它必须有一个叫type的字段,描述RPC到底是哪一条消息,还要有一个session字段来表示回应消息的对应关系,通常这两个字段都被定义成integer..package { t
2016-09-19 23:28:45
1680
原创 UniqueService
每个UniqueService名字的脚本在同一个skynet节点只会启动一次,如果已有同名服务启动或启动中,后调用的人获得的是前一次启动的服务的地址.例如: local SERVICEskynet.init(function() SERVICE = skynet.uniqueservice "foobar"end)UniqueService采用的是惰性初始化的策略,整个系
2016-09-19 21:06:56
668
转载 你全记住了 ,你就是老中医
一、麻:表明气能过来,而血过不来。二、木:麻得厉害了,就是木,是血和气都过不来了。三、酸:表明经络是通的,但是气血不足。四、胀:表明气很足,此类人是爱生气的体质,若体内的气出不去就估胀。五、痛:单纯性的痛则是因为有血淤。六、痒:表明气和血正在过来,伤口愈合的时候都会发痒。但这与全身发痒不同。1、背区诊断(1)背部肤色不均属肝胆排毒功能下降。(2)背部毛孔粗大为体质虚
2016-09-05 23:19:50
1066
1
原创 实现无边框可拖动调整大小的阴影窗口
tcStyleToolDialog.cpp#include "tcStyleToolDialog.h"#include "ui_tcStyleToolDialog.h"#include #include #include #include #include #include void TcStyleToolDialog::paintShadow(QWidg
2016-08-12 08:06:55
1266
转载 Qt常用功能集合
一、简介 QT的一些知识点总结,方便以后查阅。二、详解1、获取屏幕的工作区的大小[cpp] view plain copy { //获取屏幕分辨率 qDebug()"screen width:"width(); qDebug()"screen height:
2016-08-12 07:56:15
2578
转载 遍历进程句柄并干掉互斥体
互斥体例子int main(int argc, char* argv[]) { HANDLE hMtx = CreateMutex(NULL,false,"process"); //创建一个有名对象,可以在其他进程中访问 if(GetLastError() == ERROR_ALREADY_EXISTS) //除了创建该对象的进程能进到else分支,其他进程
2016-07-23 17:44:38
5880
4
转载 QT工程如何加快编译
1. “用Qt写的程序编译比MFC慢”的说法是错误的绝对错误,单位代码行数编译Qt远比MFC快得多,因为Qt库的头文件设计非常好,尽量都使用了前置声明,避免了头文件嵌套,几乎所有类都使用了公有类和私有类的设计,把没必要公开的声明放到私有头文件里,避免了编译时引入过多代码。而MFC没有这样的设计。至于大家感觉MFC快主要原因是MFC工程默认打开了编译预处理头文件(PCH),但是这是VC编译器
2016-07-23 17:32:15
1430
原创 第一题 AliCrackme_1.apk
1.使用jeb打开,反编译密码部分密码表在eclipse新建项目,代码拷贝进去,调试解密代码输出结果,密码为581026APK结果
2015-12-17 12:03:27
821
原创 内核数据结构
程序计算中的数据如何存放与管理?LIST_ENTRY HASH表 TREE树 LookAside结构 1.LIST_ENTRY typedef _struct _MYDATA_LIST{ LIST_ENTRY Entry; WCHAR NameBuffer[MAX_PATH];} MYDATA_LIST_ENTRY
2015-12-15 16:43:41
370
原创 同步互斥
互斥(A和B只能一个访问)KSPIN_LOCKERESOURCEFAST_MUTEX同步(A告诉B发生了什么事)KEVENTKSEMAPHOREKMUTEXKeWaitForSingleObjectKEVENTKMUTEX/KMUTANTKPROCESSKQUEUEKSEMAPHOREKTHREADKTIMER(都带dispatcher
2015-12-15 16:34:01
745
原创 ELF文件格式
ELF格式文件是UNIX系统常见二进制文件格式常见有三种文件类型:可执行文件可重定位文件共享目标文件ELF文件格式从链接视图角度分为三部分:ELF文件头、节区(section)以及节区表(section table)从装载视图角度也分为三部分:ELF文件头、段区(segment table)表以及段区typedef struct elf32_hdr{
2015-12-14 15:09:39
277
原创 arm函数调用约定
要想理解汇编代码,首先重要的事情就是理解代码之间的交互——意思是一个函数调用另一个函数的方式。这包括了参数如何传递以及如何从函数返回结果——称之为调用的约定。编译器必须严格的遵守相关标准进行代码编译,这样生成的代码,才能够相互兼容。上面讨论过,寄存器是的存储空间非常少,并且靠近CPU——用来存储当前使用的一些值。ARM CPU有16个寄存器:r0到r15。每个寄存器为32bit。调用约定规定了
2015-12-14 14:54:08
3166
原创 四.ARM 指令
ARM分为ARM状态和Thumb状态,以CPSR T作为状态指示,执行不同的指令集ARM指令集指令固定4字节包含条件码,有条件执行能访问所有寄存器THUMB指令集T1指令2字节,T2指令4字节仅分支指令存在条件执行仅能访问R0-R7,SP,LR,PCPC寄存器值 = 当前地址 + 1
2015-12-14 14:50:56
351
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人