自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sunface撩技术

大道至简,技术如歌,欢迎来到Sunface的博客,https://im.dev

  • 博客(64)
  • 收藏
  • 关注

原创 Erlang的隐藏特性

Hidden Features of C#这个帖子大家不陌生吧,有人也在stackoverflow上提出了类似的问题:Hidden Features of Erlang,不过运气不佳的是,这个帖子并没有火爆起来而且现在已经关帖了;已经回复的内容其中大部分内容我在之前的博文里面已经覆盖到了,下面逐楼梳理一遍,大家查缺补漏吧;还有一些能够开出来是基础知识,之所以被认为是Hidden Feature

2013-05-31 23:40:25 1828

原创 网页游戏分线到不分线

网页游戏分线到不分线 这一年来可以明显看到一个变化:网页游戏分线从标配逐渐变成了可选,越来越多的游戏开始不分线;当初为什么要分线?现在为什么又不分线?技术上面临着什么挑战?仅仅是技术问题么?术语解释    不同的技术实现"一条线"的概念也不尽相同,我们使用的Erlang实现,这里的一条线对应Erlang的一个VM.为什么要分线?     可以通过比较来回答这个问题:所有玩家

2013-05-31 17:15:42 2032

原创 erlang大牛的博客地址

erlang大牛的博客地址http://www.cnblogs.com/me-sa/archive/2011/11/22/erlang0017.htmlhttp://en.wikipedia.org/wiki/Common_subexpression_eliminationhttp://chaoslawful.iteye.com/blog/310346  %% erlang性能评测

2013-05-31 16:59:32 1574

原创 erlang热更新

Erlang脱胎于电信业,Joe Armstrong在描述Erlang的设计要求时其中就提到了软件维护应该能在不停止系统的情况下进行。在实践中,我们也因为这种不停服务的热更新获益良多,终于不再用等到半夜没有人的时候再做更新了.那么如何进行热更新?Erlang又是如何做到热更新的呢?这就是我们本文要回答的问题.     如何进行热更新?     关于热更新(hot_swap)可以看一下维基百

2013-05-31 13:25:40 1648

原创 Erlang Process input queue

Erlang进程有自己的消息队列来保存接收到的消息,新接收到的消息放在队列的尾部。Erlang的接收原语receive就是用来从消息队列中选择性提取消息的。receive提取消息的过程是:从消息队列的第一条消息开始匹配,如果有一条消息可以匹配上就从消息队列中移除,并执行相应的消息处理逻辑。如果没有模式可以匹配消息队列中的消息,这条消息就会保留在消息队列中。如果检查到消息队列中的最后一条消息还没有找

2013-05-31 11:31:48 1465

原创 Erlang垃圾回收机制

前面的Erlang杂记中我们简单提到过Erlang的垃圾回收机制:1.以进程为单位进行垃圾回收 2.ETS和原子不参与垃圾回收.今天我们继续这一话题,关注更多关于细节.   在Erlang的官方文档中,关于垃圾回收的知识散见于各处,要把这些信息收集在一起还是要费些力气的,完全不像微软文档那样系统化,比如这是关于.net framework垃圾回收的文档:http://msdn.microsof

2013-05-31 11:16:47 2492

原创 抓取Erlang进程运行时信息

一文我们提到使用erlang:process_info/1抓取进程运行时状态信息,有时我们需要把节点内所有的进程的信息都抓取下来,便于分析整个节点内进程的运行状态,特别是挑出一些异常的进程:比如有些进程的reduction值和其它进程相比大出好几个数量级,那这个进程需要好好检查一下了。    下面的代码就是把当前节点内所有进程遍历一遍,把进程状态写入到文本里面:process_infos(

2013-05-31 11:14:48 1721

原创 CIO需要知道的6件事

摘要:CIO在公司的IT部门可能是呼风唤雨的角色,但他们同时也处于十面埋伏之中:来自外界的新技术、顽固的CEO、窃取预算的CMO,有很多事需要考虑。CIO们面临很多艰巨的任务。他们被BYOD的热潮所包围,必须要跟上最新的云服务发展趋势,不得不评估最新的大数据创新,并且周旋于各个认为自己可以做的更好的CEO和下属之间。“作为一个高科技公司的CIO是很容易的,你要支持60000

2013-05-31 10:31:21 1795

原创 FLASH沙箱

FLASH沙箱 默认情况下,Flash Player(和 AIR 应用程序沙箱以外的 AIR 内容)首先在服务器的根目录中查找名为crossdomain.xml 的 URL 策略文件,然后在端口 843 上查找套接字策略文件。这些位置上的文件称为“主策略文件”。(对于套接字连接,Flash Player 还会在与主连接相同的端口上查找套接字策略文件。但是,在该端口上找到的策

2013-05-30 15:01:56 1563

原创 hipe

erlang的hipe相当于jit, 根据语言评测有hipe支持在纯erlang的运算上会快2-3倍,这个性能的提升对于计算密集型的应用还是比较可观的。以下是如何启用hipe:先看下erl的版本: root@nd-desktop:~# erl Erlang R13B01 (erts-5.7.2) [source] [smp:2:2] [rq:2] [async-threads:

2013-05-29 18:30:34 1937

原创 lists优化,尾递归的重要一点

lists优化,尾递归的重要一点lists:flatten/1 builds an entirely new list. Therefore, it is expensive, and evenmore expensive than the ++ (which copies its left argument, but not its right argument).In the fo

2013-05-29 14:07:39 1294

原创 元组,列表,--操作符性能

元组,列表,--操作符性能The time for calculating the length of a list is proportional to the length of the list, as opposed totuple_size/1, byte_size/1, andbit_size/1, which all execute in constant time.

2013-05-29 13:33:08 1477

原创 如何查看耗光内存的进程

首先说明一下问题,服务器1千多人在线,16G内存快被吃光。玩家进程占用内存偏高:接下来是解决过程。第一步:查看进程数目是否正常? erlang:system_info(process_count). 进程数目合理第二步:查看节点的内存消耗在什么地方?> erlang:memory().[{total,2099813400}, {process

2013-05-27 20:09:27 1850

原创 如何限制玩家发包速度

在游戏开发中,client和server之间需要维护一个心跳 ,用来检测client的网络异常中断(如突然拔掉网线),进而进行一些清理,保存工作.严谨的服务端,除了确保客户端提交的各种请求都合法,此外还需要限制玩家发包速度 ,用来踢掉一些恶意的客户端(如移动加速,攻击重复发包等). 这两个小功能,在Erlang游戏服务器开发中,通过inet:getstat/2可以很容易实现. 首先看看其说

2013-05-27 20:08:34 3299

原创 Erlang游戏开发-协议

选择什么协议?协议包含通讯协议和数据格式.通讯协议通讯协议目前常用的是:HTTP 和TCP .其有各自的特点根据游戏的特点而进行选择.HTTPHTTP比较成熟,使用极其广泛.具有丰富的基础软件和工具.对于简单的social game可以使用HTTP作为通讯协议.这类游戏对实时性要求不是很高,使用HTTP也很容易做到性能扩展,可以较好的满足需求.如果游戏前端使用HTM

2013-05-25 22:13:36 1754

原创 如果通过0-9的原子获取0-9的数字

%%   0 =get_num_by_atom(A) ->    L = atom_to_list(A),    [H] = L,    H - 48.

2013-05-24 17:30:13 1209

原创 erlang随机数

uniform() ->      {A1, A2, A3} = case get(random_seed) of                                      undefined ->                                                 seed0();

2013-05-24 16:12:59 2502

原创 创建gen_server组解决单process瓶颈

并发和顺序是一个令人纠结的问题。下面是开发中遇到的一个问题常规时间,系统表现的很“端庄”,不折腾CPU,不玩弄Mem。可是到高峰时,这个家伙就开始变态了。内存狂飙,直至swap最后无法响应。这个状况,当时折腾了一天多。始终无法找到问题所在。最后通过排查及yufeng的帮助,将问题锁定在某些局部process。Erlang中默认,所有的Process具有同等的执行机会。我们的

2013-05-24 15:18:58 1497

原创 节点间通讯的通道微调

erlang节点间通讯是可以配置的,默认的是inet_tcp 。当2个节点要沟通的时候,net_kernel模块会负责建立必要的连接。 inet_tcp会调用底层的gen_tcp进行数据发送接受。 rpc或者节点间的消息交互都是通过这个port出去的。在分布节点间,有时候会有大量的消息流动,那么所有的消息都是通过这个port出去 进来,所以这个port的性能极大的影响了节点间通讯的效率

2013-05-23 13:48:54 1143

原创 Linux kernel [select poll epoll]区别

Linux中异步IO等待无非就三个系统调用:select, poll和epoll。很多人无法理解三种调用的区别,或不够了解,今天就结合Linux kernel code详细描述三个的区别!     select:    select 的限制就是最大1024个fd,可以查看kernel中的posix_types.h,里面定义了fdset数据结构,显然select不适合poll

2013-05-23 11:48:52 1521

原创 某种情况下造成服务器发送消息无比延迟的原因

大家好!小弟最近在学习erlang,熟悉代码做了一个消息转发的server,但是在测试性能的时候遇到一个问题,请教各位,是哪里的问题,谢谢! 我开发的消息转发server的功能: Aclient Bclient都连入Server,都并加入一个组C,Aclient向C组发一条消息,Server负责将消息发给C组内除了A外的其他Client,也就是B。开发没用OTP这些高级东西。SOCKE

2013-05-23 11:25:32 2602

原创 net_kernel:monitor_nodes 订阅node连接\断开消息

Erlang中节点之间建立链接我们可以使用net_adm:ping(),连接成功返回pong,失败返回pang;实践中我们不仅仅是要建立连接,比如我们需要在与其它节点建立连接或者其它节点断开的时候做一些事情,比如在节点当掉的时候记录日志,这就需要在对应的时机取得相应的信息;Erlang在net_kernel库中提供了这样的方法:net_kernel:monitor_nodes(Flag);调用这个

2013-05-23 10:55:50 1320

原创 用超时来实现gen_server的定时

-module(otp_test).-behaviour(gen_server).-export([start_link/0]).%% gen_server callbacks-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).st

2013-05-23 10:07:20 1899

转载 程序员的十八年

本来题目想写为“十八年开发经历总结”,但是一想我的开发生涯还没结束,怎么就总结了呢。再说个人的一些积累和看法也不一定正确,所以还是改为小结比较妥当,言下之意自己还需要继续积累进步。本文主要谈几点个人的体会,这些内容有一部分可能只是我自己遇到的问题,相信还有一些其他程序员也曾遇到或者面对过。之前看到这些问题也思考过,三言两语回复过,现在以小结的方式写出来,算是对自己十八年经历的一个回顾。一.

2013-05-23 10:04:43 1529

原创 如何调试Erlang程序

调试是程序开发过程中的非常重要的过程,对于某些调试可能是开发过程中最难的一步,熟练的掌握调试工具和方法,可以提升我们调试的效率。Erlang的debugger是一个gui的调试工具。本文将介绍如何使用此工具。1 编译只有编译时加上debug_info的模块才能被调试在erlang shell中加上debug_info标志如下1>c(MODULE, debug_info).

2013-05-21 22:33:42 1731

原创 eclipse 非常好用的快捷键

自己最常用的比较不常见的eclipse快捷键1.ctrl+M 切换大屏幕和组合屏幕2.ctrl+.   下一个错误快速修改3.ctrl+shift+R 迅速查找资源4.alt+方向键 将当行代码上下移动5 ctrl+Q 回到你最后一次编辑的地方6 ctrl+O 模块的纲要7 alt+左右键,光标回到上次的地方,在代码很深的时候很有用8 ctrl+Y 恢复ctrl+Z

2013-05-18 23:23:49 1386

原创 ASCII, LATIN1, UTF8 简介

ASCII-American Standard Code for Information InterchangeCharacter repertoire:ASCII 严格来讲就是7个bit大小的字符集,也就是code point介于0-127之间的字符集合。 Character code:32-126之间的字元是可打印字元,其他是控制字元。 Character encoding:

2013-05-18 22:02:49 1476

原创 Erlang虚拟机内存使用问题以及监控

Erlang虽然号称N个9的稳定性,但是在实际使用中还是有很多机会看到Erlang Crash了的,其中和VM相关的Crash 十有八九是由于内存使用过量,导致系统服务分配内存导致的。Erlang的内存分配测量是集中批发,零售给各个VM部件,包括用户进程和ETS数据库等内存消费大户。VM的内存增长是以fib方式上升的,一旦你的内存使用到G级别,那么之后的大量内存分配会以超过你预想的速度消费。

2013-05-18 20:46:18 2200

原创 Erlang节点间ping失败原因分析

今天和项仲在部署新系统的时候发现节点间ping不成功的情况,类似    1> net_adm:ping(‘xx@ip1′).     pang     这个问题比较普遍,我就记录下一步步的排除步骤.    首先从原理上分析下!由于erlang节点间通讯是透过tcp来进行的,所以我们确保以下几点:     1. 确保网络连接是通的,可以透过ping来查看。     2.

2013-05-18 20:20:07 4292

原创 erlang doc

1.http://www.erlang.org/doc/apps/erts/erl_dist_protocol.html Distribution Protocol2.http://www.erlang.org/doc/man/erl.html  erl命令详解3.http://www.erlang.org/doc/tutorial/introduction.html#id61733 er

2013-05-18 19:18:52 2842

原创 10个高效编程框架

Helios:可扩展的移动后台框架IIO引擎:针对于HTML5的开源交互式应用程序框架Kartograph : 针对于SVB交互式地图的框架标记框架Chocolate :一个简易的Web应用框架Medoo : 轻量级的PHP数据库框架Ivory :灵活的前台框架Razor Flow :创建HTML5显示面板功能的PHP框架Bespoke.js :用户自定义的演示幻灯片Extra Strength

2013-05-18 18:50:07 2186

原创 Select在Socket编程中的应用

Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞

2013-05-16 21:22:27 1558

原创 关于网络字节序

这几天又开始做网络方面的应用了,既然是网络编程,字节序肯定是需要牢记的一个知识点了。贴篇文章,以备忘!不同的 CPU 有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序 最常见的有两种 1 . Little endian :将低序字节存储在起始地址 2 . Big endian :将高序字节存储在起始地址 LE little-endian 最符合人的思

2013-05-16 21:18:25 2191

原创 游戏开发中常用的设计模式

使用设计模式来提高程序库的重复利用性是大型程序项目开发必须的。但是在“四人帮”的设计模式概述中提到了23种标准设计模式,不但难以记住,而且有些设计模式更多的适用于应用程序开发,对游戏项目引擎设计并没有很多的利用价值。根据经验,精挑细选后,笃志在这里记录一些自认为有利用价值的设计模式,以便之后自己设计时使用。一:观察者Observer 观察者的设计意图和作用是: 它将对象与对象之间创

2013-05-16 21:16:08 1718

原创 网络游戏的位置同步

有关位置同步的方案实际上已经比较成熟,网上也有比较多的资料可供参考。在《带宽限制下的视觉实体属性传播》一文中,作者也简单提到了位置同步方案的构造过程,但涉及到细节的地方没有深入,这里专门针对这一主题做些回顾。  最直接的同步方案就是客户端在每次发生位置改变时都向服务器报告 ,服务器再转发给周围的其他玩家,其他客户端将对应的游戏实体移动到新的位置上。  但是这样存在一个问题,每个玩家

2013-05-16 21:14:28 2002

原创 小谈Online-game服务器端设计(4)

在这一章节,我想谈谈关于服务器端的脚本的相关设计。因为在上一章节里面,谈NPC智能相关的时候已经接触到一些脚本相关的东东了。还是先来谈谈脚本的作用吧。  在基于编译的服务器端程序中,是无法在程序的运行过程中构建一些东西的,那么这个时候就需要脚本语言的支持了,由于脚本语言涉及到逻辑判断,所以光提供一些函数接口是没用的,还需要提供一些简单的语法和文法解析的功能。其实说到底,任何的事件都可以看成两个

2013-05-16 21:08:34 1482

原创 小谈Online-game服务器端设计(3)

下面我想来谈谈关于服务器上NPC的设计以及NPC智能等一些方面涉及到的问题。首先,我们需要知道什么是NPC,NPC需要做什么。NPC的全称是(Non-Player Character),很显然,他是一个character,但不是玩家,那么从这点上可以知道,NPC的某些行为是和玩家类似的,他可以行走,可以战斗,可以呼吸(这点将在后面的NPC智能里面提到),另外一点和玩家物件不同的是,NPC可以复生(

2013-05-16 21:07:36 1403

原创 小谈Online-game服务器端设计(1、2)

谈这个话题之前,首先要让大家知道,什么是服务器。在网络游戏中,服务器所扮演的角色是同步,广播和服务器主动的一些行为,比如说天气,NPC AI之类的,之所以现在的很多网络游戏服务器都需要负担一些游戏逻辑上的运算是因为为了防止客户端的作弊行为。了解到这一点,那么本系列的文章将分为两部分来谈谈网络游戏服务器的设计,一部分是讲如何做好服务器的网络连接,同步,广播以及NPC的设置,另一部分则将着重谈谈哪些逻

2013-05-16 21:07:00 1672

转载 [转]网络游戏的对时以及同步问题--云风

大多数实时网络游戏,将 server 的时间和 client 的时间校对一致是可以带来许多其他系统设计上的便利的。这里说的对时,并非去调整 client 的 os 中的时钟,而是把 game client 内部的逻辑时间调整跟 server 一致即可。 一个粗略的对时方案可以是这样的,client 发一个数据包给 server,里面记录下发送时刻。server 收到后,立刻给这个数据包添加一个se

2013-05-16 21:06:10 1873

原创 百万用户级游戏服务器架构设计(2)

登录服的设计 -- 功能需求   正如我们在前面曾讨论过的,登录服要实现的功能相当简单,就是帐号验证。为了便于描述,我们暂不引入那些讨论过的优化手段,先以最简单的方式实现,另外也将基本以mangos的代码作为参考来进行描述。  想象一下帐号验证的实现方法,最容易的那就是把用户输入的明文用帐号和密码直接发给登录服,服务器根据帐号从数据库中取出密码,与用户输入的密码相比较。   这个方

2013-05-16 21:03:48 2132

空空如也

空空如也

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

TA关注的人

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