自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

食鱼酱的博客

游戏服务端开发

  • 博客(85)
  • 资源 (2)
  • 收藏
  • 关注

原创 mnesia存储过程(dump)

1.表类型为disc_copies和disc_only_copies的操作会记录到latest.log中2.dump操作会将latest.log的数据转存并落地disc_copies类型会转存到.DCD和.DCL文件(通过disk_log.erl实现)ram_copies和disc_only_copies类型不在dump中处理3.dump的触发时机1. 手动执行mnesia:dump_log/02. 通过mnesia_controller定时触发dumpmnesia_controller.

2021-01-21 15:13:02 602

原创 erlang数据类型的c源码解析(4)-map

1、前言本文讲到的map是OTP17版本的map,OTP18进行一次map的优化。在erl_map.h中有结构体的定义,代码如下:typedef struct map_s { Eterm thing_word; Uint size; Eterm keys; /* tuple */} map_t;/* map node * * Keys是一个tuple,存储着所有的Key * 紧跟结构体后面的一块连续内存用于存储对应的Val * -----------

2020-11-13 11:04:09 593 1

原创 erlang数据类型的c源码解析(3)-tuple

1、前言在erlang数据类型的c源码解析(1)-Eterm讲到,当Eterm的低2位为10B时,为Boxed(装箱)类型。tuple是Boxed类型中的一种。低2位外的位数用来表示一个指向arityval的指针。arityval的定义如下如下:// 低2位为00B,Header类型#define ARITYVAL_SUBTAG (0x0 << _TAG_PRIMARY_SIZE) /* TUPLE */为arityval是一块连续内存空间,可以当作是C语言的数组,且数组首部元素

2020-11-12 20:27:51 801

原创 erlang数据类型的c源码解析(2)-list

1、前言在erlang数据类型的c源码解析(1)-Eterm讲到,当Eterm的低2位为10B时,就是List类型,剩余的位数表示一个指向列表的指针。另外就是,先讲结论,有助于理解,Erlang中的List在C的层面上是一个链表。2、常识的宏定义CONS:一个链表节点CAR:一个链表结点的数据部分CDR:一个链表结点的Next指针#define CONS(hp, car, cdr) \ (CAR(hp)=(car), CDR(hp)=(cdr), make_list(hp))

2020-11-11 09:09:18 700 4

原创 erlang数据类型的c源码解析(1)-Eterm

1、Eterm是啥?Erlang的数据类型在C语言的层面都可以用Eterm来表示。原文注释: Eterm: A tagged erlang term (possibly 64 bits)此外,Eterm在sys.h中定义,可能是uint32,也可能是uint64,代码如下:#if SIZEOF_INT == 4typedef unsigned int Eterm;...#endif#if SIZEOF_VOID_P == SIZEOF_LONGtypedef unsigned long

2020-11-11 09:02:31 733

原创 Spark-RDD阶段划分源码解析

Spark版本2.4.5,从RDD.scala的collect函数为入口分析阶段划分流程// --------------- 1 -----------------def collect(): Array[T] = withScope { // 跳进这个runJob val results = sc.runJob(this, (iter: Iterator[T]) => iter.toArray) Array.concat(results: _*)}// --------.

2020-08-05 12:24:12 374

原创 Spark-makeRDD分区源码解析

起因object Spark_MakeRDD { def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount") val sc : SparkContext = new SparkContext(sparkConf) // 设置3个分区 val

2020-07-29 07:54:43 587

原创 Flume写入HDFS的文件出现SEQ !org.apache.hadoop.io.LongWritable“org.apache.hadoop.io.BytesWritable

Flume写入HDFS的文件出现SEQ !org.apache.hadoop.io.LongWritable"org.apache.hadoop.io.BytesWritable用Sublime打开后是这样的乱码查找官网后,发现是fileType没配置fileType的默认值是SequenceFile,也就是二进制文件,所以看起来像是乱码。解决方案在启动的conf文件上补充hdfs.fileType=DataStream即可...

2020-07-16 10:41:59 1665 1

原创 Hive配置Tez后出现 Container [xxx] is running beyond virtual memory limits

在Hive配置Tez后出现Application application_1594773736083_0003 failed 2 times due to AM Container for appattempt_1594773736083_000002 exited with exitCode: -103For more detailed output, check application tracking page:http://depot01:8088/cluster/app/applicat

2020-07-15 10:35:26 711

原创 Kafka启动消费者时提示no brokers found when trying to rebalance.

kafka在执行以下命令时提示:bin/kafka-console-consumer.sh --zookeeper localhost102:2181 --topic testWARN [console-consumer-87796_localhost002-1592779486563-9b43649b], no brokers found when trying to rebalance.(kafka.consumer.ZookeeperConsumerConnector)产生原因是没启动kafk

2020-07-02 15:15:22 2844

原创 Hive日期相关函数

注意下面函数的string只支持’yyyy-MM-dd HH:mm:ss’ 或 'yyyy-MM-dd’格式的字符串。如果是yyyy/MM/dd这样的日期需要先转换,可以参考下文的格式调整部分。格式化日期date_format(date/timestamp/string, fmt)参数可以是日期,字符串,时间戳hive> select date_format('2020-06-23','yyyy-MM-dd');OK2020-06-23Time taken: 0.043 seconds

2020-06-23 11:03:01 504

原创 记一次解决阿里云服务器挖矿病毒

个人的阿里云服务器发现挖矿程序,top发现cpu占用贼高, kill掉之后又会启动。灵性crontab -e, 发现确实是有个叫update.sh的脚本会自动执行。"*/30 * * * * sh /etc/update.sh >/dev/null 2>&1" >> ${crondir}可是修改crontab保存失败于是查看update.sh,发现update.sh中有这样的一段代码, 占用cpu高的文件名也在里面,打算干掉这几个文件。 chmod 777 .

2020-06-19 18:30:18 1406

原创 启动MySQL出现Starting MySQL. ERROR! The server quit without updating PID file

今天在云服务器上启动MySQL时,出现了如下报错:如下图:Starting MySQL. ERROR! The server quit without updating PID file (/var/lib/mysql/iZ2zedm5xm1ux98qqzpbt1Z.pid).百度上搜了一轮后,大多都是由于硬盘空间不足或权限不够导致。但仔细检查后,发现磁盘完全够用,权限也全开。继续跳进目录往下排查,发现一个err文件。日志中的第一个ERROR报错"不能分配内存"...

2020-06-17 16:52:40 13707

原创 游戏服务端开发-全局唯一ID

结构| PlatId (10bit) | ServerId (12bit) | UnixTime(s) (32bit) | IncreaseId (10bit) || 平台id (10bit) | 服务器id(12bit) | 秒级Unix时间戳 (32bit) | 自增ID(10bit) |说明类型为int64, 前10位是平台/渠道ID,中间12位是服务器的ID,接着是32位的秒级unix时间戳,最后10位是自增ID。自增id每秒归0优势每秒支持1024次并发。id自增,对MySQ

2020-05-29 18:23:31 892 6

原创 游戏服务端开发-邮件系统

开头邮件系统几乎是每个网络游戏都有的系统,以下用Erlang以例,分享一种邮件系统实现方式。数据库表tableName: user_mailmail_idtitlecontentfrom_user_idto_user_iditem_listis_readsend_time123我是标题我是内容test1test2物品列表Yes/No邮件发送时的时间戳玩家上线时,执行SELECT * FROM `user_mail` WHERE to_user_i

2020-05-20 09:00:49 7308 8

原创 游戏服务端开发-排行榜

开头排行榜几乎是每个网络游戏都有的系统,以下用Erlang以例,分享一种排行榜实现方式。结构每个排行榜对应一个actor,State使用如下结构:%% 通用排行榜结构-record(rank_list, { key = undefined, %% 排行榜的唯一key sort_list = [], %% [one_rank{}] 已经排好序的列表 ready_list = [], %% [one_rank{}] 待排序的列表 sort_time

2020-05-18 18:25:04 1382 1

原创 对闭包的一些新理解

闭包demopackage mainimport "fmt"func AddOne() func (int) int { var n int = 10 return func (x int) int { n = n + x return n }}func main() { f := AddOne() fmt.Println(f(1)) fmt.Println(f(2)) fmt.Println(f(3))}输出:$ go run main.go111316

2020-05-09 11:22:53 179

原创 游戏服务端开发-AOI-九宫格法解析(附代码)

1-啥是AOIAOI全称Area Of Interest,中文就是感兴趣的区域,个人理解就是玩家关注的并且可视的地图区域。在RPG游戏中,玩家角色移动,攻击,放技能等操作都需要向其他玩家广播,但服务端由于性能原因,会避免往整张地图上的角色进行广播。为了把性能消耗降到最低,同时不影响玩家的游戏体验,就只会向玩家关注并感兴趣的区域,也就是AOI进行广播。2-AOI-网格法(九宫格)1# 建立坐...

2020-04-25 22:26:24 3498

原创 erlang进程池-poolboy源码分析

本文以作者提供的example.erl为入口进行分析地址 : https://github.com/devinus/poolboy-module(example).-behaviour(application).-behaviour(supervisor).-export([start/0, stop/0, squery/2, equery/3]).-export([start/2,...

2020-04-12 16:06:05 479

原创 erlang性能分析-eprof

Descriptioneprof是个时间相关的分析工具。可以统计某个进程在一段时间内的函数调用次数。使用eprof时,可能会影响程序的执行速度。Demostart() -> %% 启动eprof服务 eprof:start(), %% 监控self()执行函数的过程 eprof:profile([self()], ?MODULE, fibo, [15]), %% 分析...

2019-11-24 14:13:44 1556

原创 Erlang的SHA256WithRSA签名和验签

-spec rsa_sha256_sign(Content :: binary(), PriKey :: binary()) -> binary().rsa_sha256_sign(Content, PriKey) -> [Entry] = public_key:pem_decode(PriKey), RSAPriKey = public_key:pem_entry_...

2019-08-08 18:19:37 826

原创 PHP的SHA256WithRSA签名和验签

//生成 sha256WithRSA 签名function getSign($content, $privateKey){ $privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" . wordwrap($privateKey, 64, "\n", true) . "\n-----END RSA PRIVATE K...

2019-08-08 17:57:12 11654 4

原创 Erlang正则匹配中文

1> "中国".[20013,22269]由上可知,我们的中文是以unicode编码的形式存在列表中的,因此,正则匹配只需匹配unicode码即可。对于unicode编码,我们一般习惯用16进制表示,比如匹配中文的正则表达式为 [\u4e00-\u9fa5],查文档可知,erlang的re模块中,16进制的表示方法\x{hex}, 因此就是 [\x{4e00}-\x{9fff}]。...

2019-07-05 20:28:48 686

原创 PHP实现数组合并,且key相同的键值相加

PHP实现数组相加且合并key相同的值public function add_array($array_1, $array_2) { $array_merge = array_merge_recursive($array_1, $array_2); foreach($array_merge as $key => $value) { i...

2019-06-20 17:58:00 8621 1

原创 Erlang获取URL中的参数(解析URL)

%% 获取URL中的所有参数-spec get_all_url_params(URL :: list()) -> [{atom(), binary()}].get_all_url_params(URL) -> URL_1 = string:to_lower(URL), StartIndex = string:chr(URL_1, $?) + 1, case ...

2019-06-18 11:06:40 594

原创 关于Erlang中ETS的查询与匹配(match, match_object, select)

1.ets:match/2以最常用的match函数为例子match(Tab, Pattern) -> [Match] Types: Tab = tid() | atom() Pattern = tuple() Match = [term()]Tab是ETS的tid()或ETS的表名;Pattern是一个匹配模式,是一...

2019-05-29 18:04:30 3052

转载 Erlang--STDLIB:ets

原文地址:https://blog.csdn.net/yangxing_star/article/details/8709897模块ets模块摘要 内置的数据条目存贮描述该模块是erlang内置数据条目存贮BIF的接口.它具备在erlang运行系统中存贮大量数据的能力,并且访问数据的时间是常量级的。(在ordered_set中,访问数据的时间与数据量的对数成正比).数据被组织成可...

2019-05-29 11:05:24 280

原创 PHP Warning: include(./sys/xxx.php): failed to open stream: No such file or directory

今天在Linux环境下,直接执行PHP的时候报了这个错,检查多次后,路径没错,但仍然报错。原因:由于当前路径与脚本所在目录不一致解决方案一:把相对路径改成绝对路径解决方案二:在脚本所在的目录执行脚本...

2019-04-24 12:46:55 7860

转载 关于UNIX和Windows的换行

原文地址:https://www.cnblogs.com/everest33Tong/p/6202446.html回车符号和换行符号产生背景关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时...

2019-03-08 11:35:22 2229

原创 Erlang编码和解码json(jsx)

jsx是一个用于使用、生成和操作JSON的Erlang应用程序。

2019-01-22 14:29:30 2555

原创 Erlang列表去除重复元素

Erlang列表去重的两种方法

2018-12-23 15:16:56 2165 1

原创 游戏服务端开发-好友系统

好友系统几乎是每个网络游戏都有的系统,以下分享一种好友系统的具体实现方式。

2018-11-27 09:38:55 4126 3

翻译 Erlang--STDLIB:maps

Erlang——STDLIB: maps 的中文翻译

2018-11-23 11:59:28 754 2

原创 从Web后端(Java)转到游戏服务端的感受

九零后的男生几乎都是玩电子游戏长大的,做游戏开发几乎是每个九零后男生从小就有的梦想吧。我的大学时代,正好与移动Web高速发展的时代重合了,大学里几乎所有同学都是做Web方向的开发,Web前端,Java后端等等。大四的秋招阴差阳错的就投了一家游戏公司,允许Java后端转到游戏服务端,而且团队的大佬还是与我同校同专业的比我大五届的师兄。看在缘分,我就被招了进去。技术感受:Web后端跟游戏后端的区别:...

2018-10-21 10:25:18 22131 31

原创 VMware错误:无法更新运行时文件夹共享状态:在客户机操作系统内装载共享文件夹文件系统时出错

看了网上各路大神的解决方案,总结出最靠谱的解决方法——重新安装VMware tools1、点击重新安装点击后会弹出一个窗口2、在窗口里右键打开控制台.3、用cp 将里面的tar.gz文件复制到/root中cp VMwareTools /root4、解压文件tar -zxvf VMwareTools5、运行安装程序运行如下语句/root/vmware-tools-dist...

2018-09-30 16:59:12 10489 3

原创 Erlang的安装与环境变量配置

一、为什么要学Erlang?与Java、C++这些传统的OOP语言语言,Erlang是一种COP(面向并发编程)的语言,随着互联网的普及,并发量越来越高,Erlang作为一门面向并发编程的语言,它天生就支持分布式和高并发,用武之地肯定会越来越多,出于好奇和兴趣,不妨学习一下。二、Erlang的安装下载以windows为例,先进入Erlang官网的下载界面,http://ww...

2018-09-10 15:25:17 15046

原创 [Java编程]迷宫问题(BFS)

给定一个大小为 N×M 的迷宫。迷宫由通道和障碍组成(0为可以通过,1为障碍),每一步可以向邻接的上下左右四格的通道移动。请求出从起点到终点所需的最小步数,题目保证一定有解。import java.util.*;public class Main { public static void main(String[] args) { int[][] tab = { ...

2018-08-12 16:26:46 4705 4

原创 [Java编程]分苹果

n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 &lt;= n &lt;= 100),接下来的一行包含 n 个整数 ...

2018-08-10 09:53:52 968

原创 线程池原理(JDK1.8)

Java中的线程池ThreadPoolExecutor是线程池类。对于线程池,可以通俗的将它理解为”存放一定数量线程的一个线程集合。线程池允许若个线程同时允许,允许同时运行的线程数量就是线程池的容量;当添加的到线程池中的线程超过它的容量时,会有一部分线程阻塞等待。线程池会通过相应的调度策略和拒绝策略,对添加到线程池中的线程进行管理。组成(这部分转自线程池原理——skywang12345)...

2018-08-06 16:30:37 645

原创 Spring加载Bean的流程(源码分析)

版本4.3.10入口public class Application { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); Person person = c...

2018-08-06 10:23:47 917

尚硅谷MySQL高级教程笔记Xmind版

尚硅谷MySQL高级教程笔记Xmind版(部分备注缺失),非pdf,非mmap,Xmind版本为XMind 8 Update 4

2018-07-04

AngularJS权威教程

AngularJS权威教程。AngularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。

2017-09-10

空空如也

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

TA关注的人

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