Category Archives: 编程技术类

游戏网络日志搭建方案

游戏开发过程,网络协议的调试是一件很容易扯皮的事情,所以搭建一个可以很便捷的查找网络日志的方式,能够有效的减少用于调试网络的时间 现在游戏中网络协议使用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