自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (1)
  • 收藏
  • 关注

原创 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 4390 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 166 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 610

翻译 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 3520

原创 sol2 一

sol2 v3.2 ,快速,简单的lua绑定教程:快速入门教程:完整版错误支持编译,二进制大小,编译时间特性功能用户类型容器线程定制特性api参考手册说明水准性能说明配置和安全例外运行时类型信息unicode转换格式构建许可证起源...

2021-05-12 18:25:47 422

转载 nodejs代理

最近搞了台阿里云给客户做服务器,但是蛋疼的GFW,让我在阿里云上npm操作举步维艰,在重试N次之后,接近崩溃边缘。于是上网四处搜索,发现有一个cnpm的方法似乎可以解决问题,但是发现cnpm上镜像好像并不齐全,而且也是各种卡住,所以这种方式也只能放弃 ,于是搜到了一篇npm使用代理的文章,顿时醒悟。首先,我们的npm包无所谓安全性,所以不要使用性能和效率更慢的htt

2017-01-05 15:39:38 806

原创 Cluster 集群

skynet 支持两种集群模式。如果你仅仅是单台物理机的计算能力不足,那么最优的策略是选用更多核心的机器,在同一进程内,skynet 可以保持最高的并行能力,充分利用物理机的多核心,远比增加物理机性价比高得多master/slave 模式当单台机器的处理能力达到极限后,可以考虑通过内置的 master/slave 机制来扩展。具体的配置方法见 Config 。

2016-09-28 00:05:46 2273 1

原创 CodeCache

skynet修改了lua的官方实现(可选),加入了一个新特性,可以让多了lua VM共享相同的函数原型1,当在同一个skynet进程中开启了大量lua VM时,这个特性可以节省不少内存,且提高了VM启动速度.这个特性的使用,对一般用户来说是透明的,它改写了Lua的辅助API luaL_loadfilex,所有直接或间接调用这个API都会受其影响.比如:loadfile,require等

2016-09-28 00:01:43 1515

原创 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 875

原创 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 640

原创 CriticalSection 临界区保护

同一个skynet服务中的一条消息处理中,如果调用了一个阻塞api,那么它会被挂起,挂起过程中,这个服务可以响应其他消息,这很可能造成时序问题,要非常小心处理,换句话说,一旦你的消息处理过程有外部请求,那么闲到的消息未必比厚道的消息先处理完,且每个阻塞调用之后,服务的内部状态都未必和调用前的一致(因为别的消息处理过程可能改变状态).skynet.queue模块可以帮助你回避

2016-09-27 09:36:34 480

原创 DataCenter 数据中心

datacenter 可用来在整个skynet网络做跨节点的数据共享.当你需要跨节点通讯时,虽然只要持有其他节点的地址,就可以发送消息,但地址如何获得,却是一个问题.早起的skynet提供了具名服务的特性,可以给一个服务起一个唯一的名字,用名字即可发送消息,但目前更推荐的做法是通过datacenter 或UniqueService.datacenter 类似一个全网络共享的注册

2016-09-27 09:27:27 2497

原创 DebugConsole

skynet自带了一个调式控制台服务,你需要在你的启动脚本里启动它.skynet.newservice("debug_console",8000)这里的示例是监听8000端口,你可以修改成别的端口.出于安全考虑,调试控制台只能监听本地地址127.0.0.1,所以如果需要远程使用,需要先登录到本机,然后再连接可以用telnet 或nc登录调试控制台.启动后会显示W

2016-09-27 09:15:56 1516

原创 GateServer 网关

skynet提供了一个通用模板lualib/snax/gateserver.lua来启动一个网关服务器,通过TCP连接和客户端交换数据.TCP 基于数据流,但一般我们需要以带长度信息的数据包的结构来做数据交换,gateserver做的就是这个工作,把数据流切割成包的心事转发到可以处理它的地址用法ocal gateserver = require "snax.gate

2016-09-26 16:52:27 3823

原创 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 504

原创 LoginServer

skynet 提供了一个通用的登陆服务器模版 snax.loginserver 。架构先做如下定义:登陆服务器 L 。这即是本篇介绍的 LoginServer登陆点若干 G1, G2, G3 ...认证平台 A用户 C当 C 试图登陆 G1 时,它进行下列流程:C 向 A 发起一次认证请求 (A 通常是第三方认证平台),获得一个 toke

2016-09-25 19:20:35 2383

原创 LuaApi

一个基于skynet框架开发的服务器,是由若干服务构成,你可以将skynet看成一个类似操作系统的东西,而服务则可以视为操作系统下的进程.但实际上,单个skynet节点仅使用一个操作系统进程,服务间的通讯是在进程内完成的,所以性能比普通的操作系统进程间通讯要高效的多.skynet 框架是用C语言编写,所以它的服务也是用C语言开发,但框架已经提供了一个叫做snlua的用C开发的服务模块,

2016-09-25 17:37:47 566

原创 MemoryHook 内存统计

skynet默认使用了jemalloc作为内存管理模块,但这并非必须,jemalloc能带来多大好处也和实际应用有关.是否连接jemalloc参考Buildskynet实现了一个和jemalloc物管的memory hook,用来做服务占用内存的统计,可以用来在C层面分析是否有内存泄露.它的原理是为每个工作线程分配一个TLS区,在worker处理服务的消息前,先设置当前服务

2016-09-25 10:37:36 1649

原创 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 682

原创 MsgServer 请求回应模式

snax.msgserver 是一个基于消息请求和回应模式的网关服务器模板.它基于snax.gateserver定制,可以接收客户端发起的请求数据包,并给出对应的回应.和service/gate.lua不同,用户在使用它的时候,一个用户的业务处理不基于连接.即,它不把连接建立作为用户登录,不在连接断开时让用户登出.用户必须显式的登出系统,或是业务逻辑设计的超时机制导致登出.

2016-09-25 09:23:46 1936

原创 Multicast 组播

local mc = require "multicast"引入multicast 模块后,你可以使用skynet的组播方案,你可以自由创建一个频道,并可以向其中投递任意消息,频道的订阅者可以收到投递的消息.你可以通过new 函数来创建一个频道对象,你可以创建一个新频道,也可以利用已知的频道id绑定一个已有频道.local channel = mc.new() -

2016-09-24 17:32:54 469

原创 Profile

虽然skynet可以尽可能的利用多核计算,但要特别小心在不能并发的流程上某个环节的处理能力过低,如果在一条处理流水线上,某个服务的处理能力明显低于前一个环节,消息就很有可能堆积在这个服务的消息队列里.所以应该尽量避免设计出单点服务,不要把太多不相关的处理放在同一个服务内(因为单一服务的消息处理是不能并行的),对于复杂的系统,靠猜测找到这些瓶颈非常困难,需要利用一些分析工具,然后再从设计

2016-09-24 15:03:57 367

原创 ShareData

当你把业务拆分到多个服务中去后,数据如何共享,可能是最易面临的问题,最简单粗暴的方法是通过消息传递数据,如果A服务需要B服务中的数据,可以由B服务发送一个消息,将数据打包携带过去,如果是一份数据,很多地方都需要获得它,那么用一个服务装下这组数据,提供一组查询接口即可,DataCenter模块对此作了简单的封装.如果你仅仅需要一组只读的结构分享给很多服务,(比如一些配置数据)

2016-09-24 09:32:13 2037

原创 Snax

snax 是一个方便的skynet服务实现的简单框架.(简单是相对于skynet的api而言)使用snax服务先要在 Config 中配置snax 用于路径查找,每个snax服务都有一个用于启动服务的名字,推荐按lua的模块命名规则,但目前不推荐服务名中包含"点"(在路径搜索上尚未支持 . 与 / 的替换).在启动服务时会按查找路径搜索对应的文件.snax服务用lua编写,

2016-09-24 01:08:44 1312

原创 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 309

原创 SocketChannel

请求回应模式是和外部服务交互时所用到的最常用模式之一,通常的协议设计方式有两种1.每个请求包对应一个回应包,由TCP协议保证时序,redis的协议就是一个典型,每个redis请求都必须有一个回应,但不必收到回应才可以发送下一个请求.2.发起每个请求时带一个唯一session标识,在发送回应时,带上这个标识,这样设计可以不要求每个请求都一定要有回应,且不必遵循先提出的请求先回应的时序,Mon

2016-09-21 20:03:19 539

原创 sproto

sproto是一套由skynet自身提供的协议,类似google protobuffers,但设计更简单,也更利于lua使用,同时还提供了一套简单的rpc方案.RPC需要一个消息包的主体格式,它必须有一个叫type的字段,描述RPC到底是哪一条消息,还要有一个session字段来表示回应消息的对应关系,通常这两个字段都被定义成integer..package { t

2016-09-19 23:28:45 1639

原创 UniqueService

每个UniqueService名字的脚本在同一个skynet节点只会启动一次,如果已有同名服务启动或启动中,后调用的人获得的是前一次启动的服务的地址.例如:  local SERVICEskynet.init(function() SERVICE = skynet.uniqueservice "foobar"end)UniqueService采用的是惰性初始化的策略,整个系

2016-09-19 21:06:56 642

转载 你全记住了 ,你就是老中医

一、麻:表明气能过来,而血过不来。二、木:麻得厉害了,就是木,是血和气都过不来了。三、酸:表明经络是通的,但是气血不足。四、胀:表明气很足,此类人是爱生气的体质,若体内的气出不去就估胀。五、痛:单纯性的痛则是因为有血淤。六、痒:表明气和血正在过来,伤口愈合的时候都会发痒。但这与全身发痒不同。1、背区诊断(1)背部肤色不均属肝胆排毒功能下降。(2)背部毛孔粗大为体质虚

2016-09-05 23:19:50 1002 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 1248

转载 Qt常用功能集合

一、简介       QT的一些知识点总结,方便以后查阅。二、详解1、获取屏幕的工作区的大小[cpp] view plain copy {      //获取屏幕分辨率      qDebug()"screen width:"width();      qDebug()"screen height:

2016-08-12 07:56:15 2534

转载 遍历进程句柄并干掉互斥体

互斥体例子int main(int argc, char* argv[]) { HANDLE hMtx = CreateMutex(NULL,false,"process"); //创建一个有名对象,可以在其他进程中访问 if(GetLastError() == ERROR_ALREADY_EXISTS) //除了创建该对象的进程能进到else分支,其他进程

2016-07-23 17:44:38 5758 4

转载 QT工程如何加快编译

1. “用Qt写的程序编译比MFC慢”的说法是错误的绝对错误,单位代码行数编译Qt远比MFC快得多,因为Qt库的头文件设计非常好,尽量都使用了前置声明,避免了头文件嵌套,几乎所有类都使用了公有类和私有类的设计,把没必要公开的声明放到私有头文件里,避免了编译时引入过多代码。而MFC没有这样的设计。至于大家感觉MFC快主要原因是MFC工程默认打开了编译预处理头文件(PCH),但是这是VC编译器

2016-07-23 17:32:15 1394

原创 第一题 AliCrackme_1.apk

1.使用jeb打开,反编译密码部分密码表在eclipse新建项目,代码拷贝进去,调试解密代码输出结果,密码为581026APK结果

2015-12-17 12:03:27 807

原创 内核数据结构

程序计算中的数据如何存放与管理?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 353

原创 同步互斥

互斥(A和B只能一个访问)KSPIN_LOCKERESOURCEFAST_MUTEX同步(A告诉B发生了什么事)KEVENTKSEMAPHOREKMUTEXKeWaitForSingleObjectKEVENTKMUTEX/KMUTANTKPROCESSKQUEUEKSEMAPHOREKTHREADKTIMER(都带dispatcher

2015-12-15 16:34:01 729

原创 ELF文件格式

ELF格式文件是UNIX系统常见二进制文件格式常见有三种文件类型:可执行文件可重定位文件共享目标文件ELF文件格式从链接视图角度分为三部分:ELF文件头、节区(section)以及节区表(section table)从装载视图角度也分为三部分:ELF文件头、段区(segment table)表以及段区typedef struct elf32_hdr{

2015-12-14 15:09:39 262

原创 DEX文件格式

整体结构:文件头字符串列表类型列表原型列表字段列表方法列表类定义列表数据

2015-12-14 15:03:59 301

原创 arm函数调用约定

要想理解汇编代码,首先重要的事情就是理解代码之间的交互——意思是一个函数调用另一个函数的方式。这包括了参数如何传递以及如何从函数返回结果——称之为调用的约定。编译器必须严格的遵守相关标准进行代码编译,这样生成的代码,才能够相互兼容。上面讨论过,寄存器是的存储空间非常少,并且靠近CPU——用来存储当前使用的一些值。ARM CPU有16个寄存器:r0到r15。每个寄存器为32bit。调用约定规定了

2015-12-14 14:54:08 3132

原创 四.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 341

killmutex删除互斥体

遍历进程干掉互斥体

2016-07-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除