- 博客(105)
- 资源 (7)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 基于概率与胡牌表的麻将AI算法
github项目链接:https://github.com/yuanfengyun/mj_ai麻将概率问题:1、已经四个玩家每人有13张手牌2、桌上已经打出的牌3、玩家A有1个确定的胡牌目标问: 玩家A摸入5张牌胡牌的概率?公式见图:概率计算公式.jpg整体思路1、当我手上有14张牌时,如果能胡,直接胡掉。 如果不能胡,我需要知道打出哪张牌以后,我胡牌的概率大2、分别计算打出每张牌以后的胡牌概...
2018-05-16 15:25:13
18099
10
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 跑胡子胡牌算法
腾讯课堂视频讲解:https://ke.qq.com/course/360581?tuin=104cb0e21、 基于查表的lua版跑胡子判胡算法 将所有能胡的牌型和其对应的胡息放入表中 判断胡牌时,只需要查表得到胡息,如果表中没有此项,则不能胡,如果有,得到表中的胡息,加上跑、提、碰、偎的胡息,如果大于最低胡息,就能判断是否胡牌。 代码:https://gith...
2017-10-12 16:15:37
20920
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 带赖子的超高效麻将、跑胡子胡牌算法
速度: 每秒处理100万次四个赖子判胡文档 github地址 https://github.com/yuanfengyun/qipai/tree/master/doclua版 https://github.com/yuanfengyun/qipai/tree/master/mjlib_luac++版 https://github.com/yuanfengyun/qipai/tree/master/mjlib_c%2B%2Bgolang版 https://github.com/yuanfengy
2017-06-24 10:30:24
23049
32
原创 golang游戏服务器方案
protoactor-go actor模式框架 plugin 热更新,发送热更消息,加载动态链接库,替换回调函数 根据负载情况调整actor分布进程,默认一个进程,如遇瓶颈可迁移部分actor至其它进程
2023-08-16 10:13:09
308
原创 skynet火焰图
最近项目的skynet的CPU占用比较高,经常触发告警。用systemtap工具来跑一跑,找出性能热点蛮好。网上找了个库,使用了一下,有几个问题改了下。1、lua 5.4的结构体加深了一层,所以几个 p->func->value_都需要修改为p->func->val->value_2、获取函数在原文件行数的计算不对,我加了个C函数在stap脚本中来获取行数%{#include "/root/skynet/3rd/lua/lua.h"#include "...
2022-03-28 19:05:47
607
原创 mongodb 4.0事务使用
前题事务必须用在副本集情景下否则会报错:Multi-document transactions are available for replica sets only.mongodb版本在4.0以上.使用事务步骤:获取session:session = db.getMongo().startSession()开启事务:session.startTransaction()获得col...
2018-11-07 11:00:28
6171
原创 lua代码加密策略
1、使用类似cocos的加密方式,对文件打上加密标记头,然后文件内容呢,加密后存放。需要修改lua加载文件的部分代码。安全性:基于算法保密+密钥保密,对于很多cocos程序来说,密钥是写死在代码里,所以通过反编译代码很容易获取到2、luac编译后使用,luac编译后的代码,采用工具能够恢复一部分,可读性不强,可以作为一般应用的加密方式3、将加密解密的函数,由服务端传入。客户端执行这个函数...
2018-10-28 03:20:31
4938
原创 libevent概述
libevent概述libevent提供了一种机制,当特定的事件(文件读写、定时器触发)发生时,调用一个回调函数进行处理。事件类型也支持信号或周期定时器。它的目标是替换掉网络程序中的事件循环处理,这样开发程序时,只需要调用event_dispatch(),然后动态地增加、移除事件而不需要处理循环逻辑。现在libevent支持/dev/poll, kqueue(2), event ports, ...
2018-10-20 20:44:33
1036
原创 秒杀系统实现思路
秒杀系统有请求量巨大,重复请求多的特点。我们可以请流量分步进行过滤1、在客户端进行过滤,比如在客户端进行随机,90%的概念直接丢弃这次请求,直接跳转到失败页面。2、在业务服务器中,90%的请求直接返回失败。3、真正处理秒杀业务。 ...
2018-10-20 16:52:26
764
原创 memcached介绍与使用
Memcached是什么? Memcached是一个免费、开源、高性能的分布式内存对象缓存系统。通常用来增强web服务器的性能(通过缓存减轻数据库负担)。当然也可以用途其它系统的缓存。 Memcached是一个内存key-value存储,主要用来存储从数据库、API调用、页面渲染获取的小对象(字符串、其它对象)。 Memcached简单却强大。为了方便快速部署,易用而设计简...
2018-10-20 16:16:25
321
转载 memcached文本协议
memcache通信协议协议关键字 Keys命令Commands超时时间 Expiration times错误信息 Error strings存储命令 Storage commands读取命令 Retrieval command:删除 Deletion增加/减少 Increment/Decrement统计 Statistics多用途统计 General-...
2018-10-20 14:17:35
392
原创 全网首发 skynet 服务器框架 视频教程
视频在手,天下我有。https://ke.qq.com/course/310360?tuin=104cb0e2
2018-06-23 15:46:31
3424
转载 lua结构精要
-- 单行注释--[[ [多行注释]--]] ----------- 1. 变量 & 控制流----------num = 23 -- 数字都是双精度str = 'aspythonstring' -- 像 Python 一样不可变str = "aspythonuse" -- 可以双引号str = [[ 像 Python 的多行注释可用于 表示多行字符串一样...
2018-03-08 13:48:23
478
原创 常见lua报错类型
类型1,索引nil值1、attempt to index a nil value (global 'a')a.name = "haha"2、attempt to index a nil value (field 'name')a.name.first = "haha"3、attempt to perform arithmetic on a nil value (global
2017-09-16 11:19:07
26751
原创 监控服务器程序,挂掉后自动重启
1、定时调用ps,检查程序是否活着。如果不在了就启动程序#!/bin/bashname=$1while true do c=`ps -x | grep $name | grep -v grep | wc -l` if [ $c -e 0 ]; then $name fi s
2017-07-22 17:37:40
4800
转载 网游英语词汇
网络游戏专业术语中英文对照版中英对照的网络游戏术语AC – Armor Class,盔甲等级、级别Account – 账号,与密码Password相对Add – 一只玩家加入到组队中,如果请求别人组队,可说Add me pls.AOE – Area Effect Damage,区域作用魔法,指的是一个可以伤害一个区域中的一群怪物的魔法,即所谓的群攻,现并非魔
2017-05-09 19:01:24
2961
1
原创 lua协程
lua的协程接口简单、功能强大能方便地处理一些非常规的功能需求。 1、创建协程接口:coroutine.create(f) 参数f是一个函数,创建成功会返回一个协程对象,该协程处于挂起状态。 2、运行协程接口:coroutine.resume(co,...) co是处于挂起状态的协程。 第一次运行该协程时,指令
2016-12-05 22:47:04
1284
原创 lua5.3异常机制
lua本质上利用C函数来操作LUA虚拟机。LUA虚拟机对于C来说只是在堆上的内存对象。 lua有自己的运行对象(协程),每个协程有自己的调用栈。 比如下面的函数: function add(x, y) return x + y end 如果x或y不能进行加法操作,在调用中就会产生异常。产生了异常,虚拟机需要对异常进行处理,最简单粗
2016-12-04 16:18:11
4568
原创 无系统 nasm汇编贪吃蛇demo草稿
开发系统centos 6.5 64位,利用系统时钟中断和键盘中断源码文件snake.sorg 7c00hglobal startstart: jmp entry# db 0x00# db "helloOSX"# dw 512# db 1# dw 1# db 2# dw 224# dw 2880#
2016-08-23 11:03:18
1714
原创 自己写个操作系统《一》制作启动U盘,真机启动
1、一台centos linux物理机2、as86、ld86工具 下载地址 ftp://rpmfind.net/linux/centos/6.8/os/x86_64/Packages/dev86-0.16.17-15.1.el6.x86_64.rpm安装 rpm -ivh dev86-0.16.17-15.1.el6.x86_64.rpm3、新建汇编文件 boot.s
2016-08-08 01:02:23
4576
4
原创 lua的数据对象表示
#define CommonHeader GCObject *next; lu_byte tt; lu_byte markedstruct GCObject { CommonHeader;};typedef union Value { GCObject *gc; /* collectable objects */ void *p; /* light us
2016-08-01 10:47:55
1131
原创 skynet特性
结构:有若干个服务,每个服务有一个消息队列queue和一个回调函数cb。所有服务的消息队列连成一个全局的链表G1、多线程monitor线程:worker线程:若干个工作线程,工作流程:从G中取出一个消息队列q,处理q中的若干个消息(处理的数量为:消息长度 》优先级),将q放回G中。注意:每个服务同时只会被一个线程进行处理,但每次不确定是哪个工作线程,所以根线程有关的函数需要
2016-07-21 14:49:46
1455
2
原创 mysql存储引擎之CSV
文件:.frm表结构描述.csv数据.csm表状态、当前记录数量等特点:没有索引、不能为NULL、不能自增应用场景 :数据存储为CSV文件格式,不用进行转换
2016-07-08 17:14:31
2414
原创 mysql存储引擎之achieve
引擎特点1、记录数无限制2、每个记录是定长的,不能删除,只能新增和replace3、存储的记录是压缩的4、索引查询是通过遍历,对比key找到记录适合场景:1、日志记录2、流水记录
2016-07-08 16:40:42
739
原创 erlang模块化对象用法
定义了一个player的类用法P = player:new()P:set_name("myname").Name = P:get_name().
2016-07-06 21:03:35
1147
原创 linux网络编程之poll
#include#include#include#include#include#define FD_SIZE 1024struct pollfd fds[FD_SIZE];int fd_num = 0; int add(int fd,short events){ int i=0; for(;i {
2016-06-12 17:00:51
552
原创 linux网络编程之select
#include#include#include#include#include#include#includevoid main(){ struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("127.0.
2016-06-12 16:16:42
393
原创 lua CRC32校验码生成
普通文件(如压缩文件)的crc32校验码计算方法:生成多项式采用0xEDB88320,所生成的表为:This polynomial ( 0xEDB88320L) DOES generate the same CRC values as ZMODEM and PKZIP
2016-06-02 15:02:03
7086
原创 skynet热更新方案
普通程序lua的更更新: lua的热更新一般是比较方便的,比如下面一个模块module.lualocal module = {}function module:func() print("module:func()")end 通常实现更新会这样做: local old_module = require("module") package.load
2016-05-16 10:31:32
5596
原创 记录lua的table转string一个问题
最近的项目开发中发现原有代码的table2Str函数实现不对,一时偷懒从网上百度了一下。选中了http://blog.csdn.net/xiaodan007/article/details/7096718这个地址的代码用到了项目中。 在项目中的使用,将table转化为string后,数据有丢失,追踪,发现是这个实现有问题。 在形如 { {aaa=1},{bbb=2}} 这
2016-04-28 21:55:38
1927
原创 mnesia的锁机制
一、基本概念1、mnesia的锁不是操作系统级别的锁;2、一个mnesia结点中,所有的锁由单独的mnesia_locker进程进行管理;3、其它进程对锁的申请和释放通过发送消息到mnesia_locker进程实现;4、A进程请求锁时,发送的同步消息如果当时获取到了锁,则返回获取到的锁消息;如果没有,则将锁请求加入等待队列,A进程阻塞等待返回;5、B进程进行释放锁时,发送同步消
2016-04-06 00:49:08
861
转载 ejabberd源码分析《三》客户端数据处理
参考 http://www.cnblogs.com/yjl49/archive/2011/09/02/2371964.html1.客户端连接服务器后,发送消息给服务器的xml数据处理在ejabberd_c2s中。 ejabberd_c2s 是一个gen_fsm 状态机,在socket连接建立之后创建。 初始状态为 wait_for_stream,接受形为 {xm
2016-04-05 19:32:09
1339
原创 ejabberd源码分析《二》客户端网络监听
在配置文件ejabberd.cfg的listen配置项里,可以配置监听模块由ejabberd_listener.erl负责启动监听1、客户端的连接生成一个套接字以后,由ejabberd_c2s.erl调用ejabberd_frontend_socket:startejabberd_receiver:start 生成一个gen_server处理套接字数据在ejab
2016-04-05 17:30:12
1099
原创 ejabberd源码分析《一》application启动
什么都别说,直接看启动函数start(normal, _Args) %% ejabberd_logger主要是读取application的配置文件,然后启动lager,设置lager参数。 ejabberd_logger:start(), %% 将本进程的pid写入配置文件指定的文件名中 write_pid_file(), %% 新建jid ets jid:start(), %% 启动其它app
2016-04-03 01:42:04
1527
GNU的自平衡二叉查找树(AVL tree、redblack tree等)源代码
2012-03-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人