Author Archives: admin

游戏网络日志搭建方案

游戏开发过程,网络协议的调试是一件很容易扯皮的事情,所以搭建一个可以很便捷的查找网络日志的方式,能够有效的减少用于调试网络的时间 现在游戏中网络协议使用protobuf的较多 以Protobuf为例,先将protobuf展开为可以阅读的json字符串 str, _ := json.Marshal(msg) logStr := fmt.Sprintf(“%v”, string(str)) 写入日志文件的格式我们可以用|来分割日志的内容 1|1002005006|1|SS2GS_Broadcast|{“msg_id”:30045,”msg_info”:”CgAQCxhlIAIgASgA”} 含义如下 ServerId|UserId|EventId|protoname|protoinfo 我们使用Elasticsearch、Logstash、Kibana、filebeat来处理这些带|分割的日志行文本 logstash的配置如下 input { beats { port => 5044 } } filter { grok { match => { “message” => “%{DATA:serverid}\|%{DATA:userid} \|%{DATA:protoname}\|%{DATA:protoinfo}$” } } mutate … Continue reading

Posted in 编程技术类 | Leave a comment

字幕提取程序

最近在学习英语,主要想从美剧与英语电影上面来学习,花时间使用Python写了一个字幕文件提取成Markdown的程序(基本上与Python正则表达式有关) 代码地址: https://github.com/tanglong/ass

Posted in 编程技术类 | Leave a comment

Python 股票研究

Python 股票研究 软件安装 Numpy Matplotlib Pandas Pandas-datareader BeautifulSoup4 scikit-learn / sklearn 安装pip sudo yum install -y python-pip 升级pip pip install –upgrade pip Debian apt-get install python-dev Centos yum install python-devel matplotlib python -m pip install matplotlib Debian apt-get install python-tk … Continue reading

Posted in 编程技术类 | Leave a comment

kafka集群安装文档

1. kafka下载与安装 su – root wget http://www-us.apache.org/dist/kafka/0.10.1.0/kafka_2.11-0.10.1.0.tgz tar zxvf kafka_2.11-0.10.1.0.tgz sudo mv kafka_2.11-0.10.1.0 /usr/local/kafka sudo chown -R root:root /usr/local/kafka 2.常用指令 #创建Topic ./bin/kafka-topics.sh –zookeeper 127.0.0.1:2181 –replication-factor 1 –partition 250 –topic wgame_log –create #列出Topic ./bin/kafka-topics.sh –zookeeper 127.0.0.1:2181 –list #删除wgame_log ./bin/kafka-topics.sh –delete –zookeeper … Continue reading

Posted in 编程技术类 | Leave a comment

hbase集群安装文档

1. 一台机器上的配置文档 1.1 参考 hadoop集群文档完成hadoop的安装 hbase依赖于hadoop 1.2 hbase安装 cd /usr/local wget https://archive.apache.org/dist/hbase/hbase-0.98.8/hbase-0.98.8-hadoop2-bin.tar.gz sudo tar xzf hbase-0.98.8-hadoop2-bin.tar.gz sudo mv hbase-0.98.8-hadoop2 hbase sudo chown -R hduser:hadoop hbase 1.3 修改 hbase-env.sh 文件 cd /usr/local/hbase/conf 修改 vim hbase-env.sh export JAVA_HOME=/usr/java/jdk1.8.0_131 export HBASE_MANAGES_ZK=true 1.4 修改 … Continue reading

Posted in 编程技术类 | Leave a comment

Flume安装文档

下载与安装 wget http://archive.apache.org/dist/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz tar -zxf apache-flume-1.7.0-bin.tar.gz sudo mv apache-flume-1.7.0-bin /usr/local/flume sudo chown -R hduser:hadoop /usr/local/flume vim ~/.bashrc export FLUME_HOME=/usr/local/flume export PATH=$PATH:$FLUME_HOME/bin source ~/.bashrc cd /usr/local/flume/conf cp flume-env.sh.template flume-env.sh cp flume-conf.properties.template flume-conf.properties vim flume-env.sh export JAVA_HOME=/usr/java/jdk1.8.0_131 export JAVA_OPTS=”-Xms100m -Xmx200m -Dcom.sun.management.jmxremote” 配置 … Continue reading

Posted in 编程技术类 | Leave a comment

docker

hbase hadoop ./start-container.sh latest 2 进入到容器内部 docker exec -it master.krejcmat.com bash zookeeper分布式部署 cd /examples/zookeeper/five-server-docker docker-compose up 终端模式 docker-compose up -d 后台模式 cd /examples/zookeeper/five-server-docker docker-compose run –rm zkcli -server zookeeper1 docker-compose yml 指定port ports: – “4000:4000” docker退出shell Ctrl-D

Posted in 编程技术类 | Leave a comment

帧同步方案分享

帧同步方案分享 分享概要 帧同步方案介绍 相关重难点方案介绍 和传统C/S方案的对比 一、帧同步方案介绍 帧同步即LockStep,顾名思义,锁定每一步,RTS类型的大作,如War系列、星际争霸系列、帝国时代系列无一例外的采用了这种技术, 对RTS游戏来说,游戏中可能经常有成百数千个单位在同时活动,同时服务器还要同时跑多局游戏,如果用传统C/S同步方式同步每个单位的属性状态的话,网络流量和AI逻辑的CPU消耗都是非常的大的,而如果用只同步输入的方式,逻辑在客户端执行,会大大的减少服务器的资源消耗, 在联网的客户端(可能有主机)之间的一种步进和同步机制,目的是为了让所有客户端只需要同步操作,就能运行出同样的结果 举个例子,可把lockstep系统比喻成录放机,两台录放机要保证磁头以同样的角速度转动,并且要有相同的输入磁带源,电路特性要是一致的,才能播放出相同的声音 这个例子引出了帧同步的关键点:同步性与确定性 同步性:各客户端每秒帧数一致,在每一帧都处理同样的输入数据 确定性:系统在相同地输入下,要有相同的输出 网络层,网络模型的选择、缓存快播、断线重连等等 逻辑架构层,按一定的帧率执行,并保证在每一帧相同的输入下产生相同的输出,以确保同步性和确定性 网络层 P2P帧同步模式 客户端之间建立直接的UDP连接,每个客户端收到所有其他客户端的第N帧输入数据时,才执行第N帧。当长时间未收到某个客户端的输入时会先等待同步,未果该客户端会掉线 Host-Peer帧同步模式1 Host一定要等到所有客户端第N帧消息到达,才会向所有Peer同步第N帧。当长时间未收到某个客户端的输入时会先等待同步,未果该客户端会掉线 Host-Peer帧同步模式2 所有客户端直接向Host发玩家的当前输入数据,Host按固定的时间间隔发每一帧的所有玩家输入数据发给所有客户端,客户端收到时再执行这一帧 网络模型 Host-Peer模型2更适用一些,在一个客户端卡住时,不会影响到其他客户端继续游戏 缓冲与快播 因为客户端输入完全是通过网络获取,缓冲与快播解决网络延迟、网络波动等带来客户端帧数不平滑的问题 断线重连 客户端断线后重连,Host需要补发该客户端丢失的帧消息,有几种断线重连类型,后面会具体讨论相关方案 逻辑架构层 前面提到关键点:同步性和确定性的保证,如何保证? 同步性:所有客户端应该有一个可以统一达到固定执行帧率,而且只有在收到服务器的某帧输入才会执行这一帧 确定性:保证每帧执行的确定性,在相同的输入下有相同的输出 为了满足上述两个需求,首先需要对核心层和表现层进行分离 保持同步性时,需要等待网络的输入,如果网络卡住,核心逻辑可以等待,表现逻辑需要继续执行,这样不会导致呈现给用户的表现中断或不连贯(声音、动画、界面、操作等) 硬件本身会导致不确定性,因为PC机组装的特性,导致硬件的种类繁多,很难保证不同硬件运算结果的一致性,比如浮点计算,物理运算,GPU运算等等,核心层可以更少的接触硬件 分离后,核心层可以以较低的帧率跑,如8~16帧,运算所有必要的核心逻辑,如武器、技能、移动、AI、触发器等,低帧率可以降低CPU消耗 表现层可以以较高的帧率跑,运算当前视口可见单位的动作动画表现、移动表现、特效、声音、物理、UI等等 所以这里不同于传统MMOG的逻辑和渲染分离,但可以想象成传统MMOR的服务器(核心)和 客户端(表现) 越简化的逻辑越容易保证确定性,这也是把系统一分为二的主要原因,核心和表现分离后,核心层更加纯逻辑化,只用保证核心层的确定性即可 … Continue reading

Posted in 编程技术类 | Leave a comment

小昆山学车 科目三

进入车中问好, 拉开车门,出去,关上车门,车门有两节 逆时钟绕车一周,回到车内, 调节座位, 看左右后视镜, 关掉所有灯光,危险提示灯,向下确认转向灯已关, 拉上安全带, 转到空档,发动汽车,(空档发动) 有灯光则做灯光 如果没灯光,打左转向灯,一定要在一档前打左转向灯, 踩离合,踩刹车,挂一档,看左后视镜,松手刹, 向左15课钟,加油,挂两档, 当听到前方左转的指示时: 打左转向灯,如果同向有多条车道的,看左后视镜,左转向灯,滴三下后,换线,不要减速 注意红绿灯 绿灯时,,换二档,前进至车头与左万30公分时 向左打一圈,注意避让直行车,如果是多个同向车道的,加油后,打右转向灯,看右后视镜,滴三下后,换线,(注意光华路的前段有实线) 换线成功后关闭右转向灯 当听到前方调头的指示时: 打左转向灯,注意这是在哪种车道,如果是在思贤路这种东西方向的路时,要注意停止牌, 如果是大路,同方向有多条道的,看左后视镜,左转向灯,滴三秒后,换线,减慢,换一档,绿灯时,人肩过人行横道30公分时,向左打到底, 转到快车道,加油,换二档,打右转向灯,看右后视镜,滴三秒后,换线, 单方向一车道调头,第一时间打左向灯,如果有停止牌,在停止牌前刹车,挂一档,各路段不一样,看右后视镜,向右一圈,后打左转向灯, 向左打到底,看左边情况, 当听到前方右转的指示时: 打右转向灯,如果不是在车道右边,则换道,要重新开启右转向灯, 右转弯,打右转向灯,轻踩刹车,换档到二档,到的是慢车道,不需要看红绿灯, 当听到靠边停车的指示时 打右转向灯,踩刹车,踩离合,右车头一与线重合,调平行,踩刹车,离合到底,挂一档,拉手刹,熄火,按危险警示灯 下图为崇南公路与昆港公路的交汇处,有停止牌与掉头牌,是人到人行横道2/3处 思贤路虽然没有停止牌,但有红绿灯, 区间东路没有停止牌,没有红绿灯 光华路没有调头标志与停止杆,有红绿灯,双黄线调头 注意左转不要压实线 镇中心路有一个很隐迷的停止牌 有停止牌,双车道,到左边过人行横道调头,调头到慢车道 有停止牌 中德路文翔路口 看了一下发现有停止线的都需要停 思贤路小厂西侧调头 … Continue reading

Posted in 生活 | Leave a comment

小昆山学车-科目二

科目二 系安全带,调座椅到最前,车窗正中,将左右后视镜往前往上推,把可以看到左右门把手是平行的 进入倒车区域,打左转向灯 进入倒车区域右侧,到肩膀与停止线(黄色虚线)平行时,停止,前进时车头左轴对准地面箭头的根部的中心 挂倒档,到肩部与右侧杆平行时,向右打到底, 看左边的后视镜, 快平行时,看到前面角时回半圈,看到后面角时回一圈, 当人的肩膀与第二格与第三格,(一般情况下第二格为黄色,第三格为黑色,)时,刹车 挂前进档 当车头与前面实线时,盖住时,要快,感觉不要等完全盖住,完全盖住可以压实线,向左打到底,之前是45度回圈,现在是与平行差30度,60度左右向右回半圈,平行时向右回一圈,前时至肩膀与虚线平行时,刹车, 挂倒档,至肩膀与杆过一点,(看过去杆的左侧)时,向左打到底,看右后视镜,出现前角时,打半圈,出现后角时,打一圈,(有可能是先出现后角,这样的话先向右回半圈,迅速向右回一圈,), 当人的肩膀与第二格与第三格,(一般情况下第二格为黄色,第三格为黑色,)时,刹车 挂前进档 当车头与前面实线时,盖住时,要快,感觉不要等完全盖住,向右打到底,平行时回正, 出虚线后 可能需要向左打方向进入侧方停车的区域 车的左轴沿着箭头至肩膀与杆平行处 刹车 看右边后视镜有几块,算出左后视应该关注的点是哪个 挂倒档,往右打到死(当中可以不松刹车) 一般是这个黄格子出现,即距离实际角1/4处,向左打一圈半,(一圈半的计算一般是重新到自己点后的相反方向),这个时候实际上车身是正的, 趴出去看后车轮(通过后视镜),一旦轮子触到线向左打死,趴出去看车身时线的平行时, 刹车,打左转向灯,挂前进档,注意不要在空档有停留, 前进,至车头中心到实线时,向右打一圈半,过个一二秒向右打一圈,平行后向左打一圈回正, 向左转弯进入上坡的阶段 我一般走的是中间的路线 左边的车头轴对前面线白实线的中心,缓慢前进,注意到前方有一个停车的标志, 到人与停车标志前的一个水泥线前一个方向盘的距离时,与人肩膀平行,停车, 黄格子的水泥处 相当于必须要停到这钉子下 一定要慢抬离合把车身震动(这个地方很容易熄火),松右脚的刹车,前进至坡项, 下坡离合器踩到底,轻踩刹车,很右转半圈,注意观察前视镜 很右转,回正,进入曲线驾驶路线, 将左车头车轴对准前方一水泥的曲线灯处,至左角的刚盖住灯,向左打一圈,注意观察左右前视镜,哪边宽往哪边, 这个时候一般情况是你的方向盘是向左打了一圈多加了一刻钟,注意前面车身已开阔,或者,左右两边前视镜的轮距离差不多时,回这个一刻钟,当右车头轴与前方的点相差一个方向盘时, 向右打两圈,注意观察左边的后视镜,别压线了,这时,实际上你的车是向右打了一圈,注意观查左边的别压线,近就向右打,左边距没变,右边情况不明时,别动,至右边慢慢开阔,慢慢向右打, 当发现左边的的点已经完全出来时,向左打一圈回正, 进入窄路调头的, 车头一被水泥线盖住,往左打到底,45度时向右回半圈,平行时向右回一圈,至车头被前方线盖住,向左打死,探出身去,看前左轮,一开始看不来,当前车轮与前黄实线差一个方向盘时,刹车, 这个时候可以左手拿方向盘,方便探出身,刹车的情况下,踩离合,挂倒档,向右打到底,松离合,松刹车,看左后视镜,后车轮与黄实线一个方向盘的距离,小于,必须要近,感觉这个时候后车轮是正的, … Continue reading

Posted in 生活 | Leave a comment