自定义博客皮肤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

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

转载 [Erlang]Binary结构和性能分析

Erlang中封装binary数据指针时,尾部都会被贴上boxed标签(即最后2位为10B),指针所指向的内容首4字节(确切的说是sizeof(Eterm)字节)是一个header,从《Erlang数据类型的内部实现》一文中关于header的一段注释中可以看到:[cpp] view plaincopy/*  * HEADER representation:  *  *  aaaaaaaaaaaaa

2015-08-07 10:21:41 2358

转载 [Erlang]Lager如何防止日志过载

og 这个事, 说大不大说小又不小. 大点的, 可以用scribe flume 这样的系统去做, 小点的, 也就打印一个调试信息而已. 在Erlang 中, log 这事情确实比较伤, error_logger 是个单点, io:format 容易导致节点崩溃. 在开源社区, lager 算是使用比较广泛的一个, 然而, 同样不能完全避免单点的问题. 因为在lager 中, lager_event

2015-08-06 17:28:59 4292 1

转载 [Erlang]系统瓶颈检测

遇见recon 以来, 每次定位系统瓶颈, 总是能让我眼前一亮. 比如说, 定位非尾递归导致的内存暴涨, 定位引发CPU满载的进程.得心应手,每每额手称庆.recon 是ferd 大神 释出的一个 用于生产环境诊断Erlang 问题的一个工具, 不仅仅是对Erlang stdlib 接口的封装, 还有memory fragmentation 相关的函数.CPU 统计相关在ferd 大神放出的 Er

2015-08-06 17:04:20 1810

转载 [服务器架构]RESTful架构详解

1. 什么是REST  REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:“我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强

2015-08-06 10:44:11 2575

原创 分布式数据库的未来工坊(1)

在搭建网站时,如果更新不多会用静态文件服务器,但如果要扩容,处理巨大的流量是件比较复杂的事情。负载均衡、磁盘冗余、容量规划、横向扩展、缩减,工程师需要考虑的问题非常多。在这里,我们将使用基于 GitHub pages 中表现出色的 Riak,在不编程的情况下,搭建既可以维持稳定延迟,又可快速扩展的静态文件服务器网站。概要大家一定都还记得初次搭建 Web 服务器的时候,先安装 Apache http

2015-07-28 13:03:18 2141

原创 分布式数据库的未来工坊(2)

上一回,我们介绍了 Riak 的另类使用方法。但其原始设计思想、API、使用方法等介绍都比较有限,很多读者可能还没很好地了解 Riak。起初,Riak 是 Basho 的工程师为了在自己的服务上使用而创造出来的,它的基本特点为:扩展性——添加服务器后,容量、性能都能相应地增强。可用性——压力超过负荷时也能稳定地运行、响应。容错性——发生多个故障时不丢失数据、不停止服务。由此可见,维持系统稳定是 R

2015-07-28 13:03:09 1764

原创 [Erlang]Binary陷阱汇总

原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface联系邮箱:cto@188.com1.有个同学在群里问了这样一个问题:  > ||  > >   >> 结果输出的是>这显然不是他预期的结果,可是为什么会发生呢? erlang的binary中,每个数字都是一个字节也就是8bit大小,因此当56 * 56 = 3248时,显然结果超出了8

2015-07-27 19:29:00 1581

原创 [Linux]不常用命令汇总

1.将指定目录下后缀为.beam的文件全部删除 find /a/b -name ".beam" -exec rm -f {} \;

2015-07-26 16:28:28 1577

转载 分布式中的事务?

本文目录 [-点此收起]微吐槽集群中存活的节点与同步一个bigdata问题最多处理一次(At most once)最少处理一次(At least once)仅处理一次(Exactly once) TransactionOpaque-Transaction两阶段提交结语微吐槽hello,world.不想了,我等码农,还是看看怎么来处理分布式系统中的事务这个老大难吧!本文略长,读者需要有一定耐心,如果

2015-07-16 09:44:07 1497

转载 XMPP协议介绍

本文介绍XMPP协议原理及相关信息。  XMPP协议简介   XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIM

2015-07-11 09:56:21 1614

原创 2015再谈游戏同步

实时动作游戏在近年来得到迅猛的发展。而游戏同步问题,成为大家继续解决的核心问题之一。早在 2004年,国内游戏开发还处于慢节奏 RPG满天飞的情况下,我就开始实时动作游戏研究,分别在 2005-2006期间写了一系列相关文章,被好多网站转载:如今十年过去,网上越来越多的人开始讨论游戏同步技术了,然而很多文章往往只针对某种特定的游戏情况,而观点又经常以偏概全。很多人并没有真正开发过实时动作游戏,更别

2015-07-06 12:08:37 3462 1

原创 格斗游戏如何实现同步?

帧锁定算法解决游戏同步算法概念该算法普遍要求网速RTT要在100ms以内,一般人数不超过8人,在这样的情况下,可以像单机游戏一样编写网络游戏。所有客户端任意时刻逻辑都是统一的,缺点是一个人卡机,所有人等待。1.客户端定时(比如每五帧)上传控制信息。2.服务器收到所有控制信息后广播给所有客户。3.客户端用服务器发来的更新消息中的控制信息进行游戏。4.如果客户端进行到下一个关键帧(5帧后)时没有收到服

2015-07-06 12:02:04 5442

原创 [Erlang]优秀的第三方外部库列表

无意间google到一个好东西,分享给大家https://github.com/drobakowski/awesome-erlang

2015-07-04 17:01:23 2711

原创 [Erlang]link进程信号详解

原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface联系邮箱:cto@188.com估计很多同学都会对link时各种信号及捕捉机制有点迷糊,我这边在画一个表格,特分享给大家ReasonTrapping exits (trap_exit = true)Not trapping exits (trap_exit = false)normal

2015-06-27 23:54:43 3097 4

原创 [Erlang]Erlang常用工具讲解

原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface联系邮箱:cto@188.com但凡有图形界面的都需要linux系统安装了wx图形库,windows是自带的1.debugger erlang调试工具,包含了单步调试,断点等功能2.observer observer集成了application监控及进程管理工具,同时包括一些很基本

2015-06-26 13:20:41 3198

原创 如何获取自己的SSL证书

原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface如果仅为了测试,那使用下面方法即可:测试证书创建:1.创建证书的key$ openssl genrsa -out key.pem 10242.创建证书,注意这里的common name应该填你的server name$ openssl req -new -key key.pem -ou

2015-06-25 14:48:02 7305

原创 [Erlang]如何在Erlang中使用SSL

原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface   最近准备写一个SSL服务器,结果发现网上相关的资料很少,因为特地在此给大家分享一下SSL的基本使用方法.SSL在使用上跟Tcp很像,但是也由区别。首先需要一个SSL证书,可以在参考这篇文章创建。下面的代码实现了服务端和客户端,对于有经验erlang同学,应该很容易理解了,就不赘述

2015-06-25 14:23:52 6446

原创 [Erlang] XML处理方案

转载自http://www.cnblogs.com/me-sa/archive/2012/07/20/erlang_xml.htmlXML以及相关的XSLT,XPath,XSD工具在数据层面为我们提供了极大的灵活性和便利.我们游戏协议的代码自动生成就是首先使用XSD工具设计了协议的Schema,然后使用.net的xsd工具直接生成实体类,然后就直接在工具中操作对象就可以了,协议的XML文件也可以通

2015-06-23 10:36:11 1785

转载 [Erlang]supervisor的child设置为dynamic详解

原创文章,转载请注明: 转载自系统技术非业余研究本文链接地址: Erlang supervisor规格的dynamic行为分析今天benjamin同学在网上问了以下问题:我在看mochiweb和misultin的代码时有一些不理解的地方,以下是代码:init({MainSupRef, Port, OptionsTcp, AcceptorsPoolsize, RecvTimeout, SocketM

2015-06-18 16:49:57 2082

原创 游戏服务器架构演化史

类型1:卡牌、跑酷等弱交互服务端卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器:登录时可以使用非对称加密(RSA, DH),服务器根据客户端uid,当前时间戳还有服务端私钥,计算哈希得到的加密 key 并发送给客户端。之后双方都用 HTTP通信,并用那个key进行RC4加密。客户端收到key和时间

2015-06-17 22:16:28 3606 2

原创 [Erlang]类型声明及检查详解

随着项目越来越大,项目的规范性也是越来越重要,因此类型声明、检查及dialyzer的使用变得尤为重要  ——Sunface转载自http://erlangdisplay.iteye.com/blog/404570Erlang类型及函数声明规格Contents概述意义规范类型及其定义语法自定义类型定义在record中使用类型声明函数规范定义使用dialyzer进行静态分析生成plt使用dialyze

2015-06-17 17:33:23 5117

转载 [Erlang]port(gen_tcp)如何并行?

R16B发布的时候,其中一个很大的亮点就是R16B port并行机制, 摘抄官方的release note如下:– Latency of signals sent from processes to ports — Signalsfrom processes to ports where previously always deliveredimmediately. This kept laten

2015-06-16 14:52:54 1873

原创 [Erlang]虚拟机学习杂记

原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface联系邮箱:cto@188.com1.获取已加载模块中的所有原子33> beam_lib:chunks(fac, [atoms]).{ok,{fac,[{atoms,[{1,fac}, {2,state}, {3,

2015-06-16 12:54:51 1789

原创 [Erlang].erl文件的一生

最初形式 File.erl1.preprocessing(预处理) compile:file(File,['P']).2.expansion(扩展) compile:file(File,['E']).3.core erlang(erlang core代码) compile:file(File,[to_core]).4.kernel erlang(erlang kernel代码) compile:f

2015-06-16 12:35:46 2993 2

原创 [Erlang]在线学习资源

1.http://erlangcentral.org  2.http://studzien.github.io/hack-vm/part1.html#slide-0

2015-06-05 11:36:52 1573

原创 [Erlang]如何添加自己的BIF

步骤1. 运行configure      2. 将你的bifs添加至erts/emulator/beam/bif.tabbif re:grep/2 bif re:compile/13. 创建一个C代码文件erts/emulator/beam/erl_bif_re.c4.将你的C代码文件添加至erts/emulator//Makefile里RUN_OBJS = $(OBJDIR)/erl_bif_

2015-06-05 11:30:36 2572

转载 [Erlang]时间函数及时间校正机制详解

很多人会注意到这个问题,erlang提供了2个时间函数,erlang:now() 和 os:timestamp()。用法一样,都是返回当前的时间。具体时间是从1970年1月1日零时算起,到现在经过的时间,结果为{MegaSecs, Secs, MicroSecs}。这两个函数有什么区别?os:timestamp() 获取到的时间为操作系统的时间,不做任何修正;而erlang:now(),每次获取都

2015-06-04 15:40:07 2648

转载 [Erlang]多种方法接入远程shell控制台

erlang shell是用户与 erlang 运行时系统交互的界面程序。事实上,erlang VM的运行不依赖任何shell,只要在启动的时候添加参数detached就可以脱离终端。-detachedStarts the Erlang runtime system detached from the system console. Useful for running daemons and b

2015-06-04 15:01:02 1563

转载 [Erang]binary转换的一些技巧

erlang提供了binary_to_term,把一个二进制数据转为原始的erlang数据。但是,这个函数也有副作用。如果直接将对端传来的数据做一次 binary_to_term,就可能会导致VM crash掉。binary_to_term 副作用这是因为二进制数据带有原子时,binary_to_term会生成这些原子。但VM原子总数是有限制,而且原子不参与GC。假如数据带有原子数量超过erlan

2015-06-04 14:17:32 2429

转载 [Erlang]用erlang实现binary_to_term

erlang提供了两个函数用于erlang数据与二进制的转换,term_to_binary 把erlang数据转成一个二进制数据,binary_to_term 则是把二进制数据转为原始的erlang数据。这两个函数都是c实现的,效率很高,可用于序列化和反序列化数据,可以被直接用来当作网络封包协议。文章主要探讨这种二进制协议数据的组织形式,以及用erlang语言实现binary_to_term前言接

2015-06-04 14:06:48 2371

转载 [Erlang]Mnesia常用技巧

Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。文章收集一些常用 mnesia 使用技巧。mnesia判断表是否存在[plain] view plaincopy%% 确保已经 mnesia:start().  lists:member(Tab,  mnesia:sy

2015-06-04 11:21:22 1778

转载 [Erlang]Erlang与C的节点通信

Erlang节点之间的通讯,主要用于两个Erlang节点之间的通讯,但Erlang还支持与java构建的节点通讯,甚至与c构建的节点通讯,前面两种方式在我以前的文章都有讲到,所以这里讲Erlang与c构建的节点通讯。Cnode与erl_interface想用C构建一个erlang节点,要利用Erlang的erl_interface接口来实现。c建立的节点,叫CNode ,其中,erl_interf

2015-06-04 11:06:02 1789

转载 [Erlang]节点通讯的几种形式及问题分析

分布式是erlang的三大特性之一,都说erlang分布式,最简单最直接的应用就是节点通讯。问题来了,怎么节点通讯,节点连接可能很多人知道,如何在两个节点连接后进行本地与远程通信?这就是本篇所讲的内容。下面是示例代码,完成2个节点的通讯:A节点的代码:[plain] view plaincopy-module(server_demo).  -export([start/0, rpc_call/2]

2015-06-04 10:48:43 4751

转载 [Erlang]Erlang与Java如何进行节点通信

我们知道,erlang在开源社区的活跃度远远不及java社区,在java社区中有很多优秀的开源框架,比如struts、hibernate、 spring、hadoop、hbase等,为了让erlang和java社区的众多开源框架相结合,让他们优势互补,可以让erlang来调用java写的中间件。 erlang提供了一个Jinterface代码包,java可以和erlang建立节点通信。通过这种方式

2015-06-04 10:41:44 2631

转载 [Erlang]Ets并发读写详解

ETS是Erlang内置的内存数据库,可用于多进程共享数据,具有并发读写的性能,文章就这点展开探讨,重点说说ets并发读写两个参数的优缺点及适用场合。比如新建一个person的ets表:ets:new(person, [set, public, named_table, {write_concurrency, true}, {read_concurrency, true} ]).说说ets并发读写

2015-06-04 10:28:49 4883

转载 [Erlang]Shell中数据对齐输出

最近在erlang shell做一些测试,为了让测试结果数据显得更直观,想对齐需要打印的数据,做成像表格一样的效果。开始的想法是在数据中插入tab。当然,erlang也有对tab的支持,但实际效果不理想。对tab的支持如下:1> io:format("No1~sNo2~n1~s2~n", ["\t", "\t"]). No1        No2 1             2 ok但数据的长度超

2015-06-04 10:25:05 4398

转载 [Erlang]Mnesia修改表结构

mnesia创建的时候需要指定表record结构,如果定义的record结构修改了,就要更新数据的表结构,否则mnesia无法正常读取和写入数据。我们最开始是这样定义结构的-record(person, {name, age}).然后这样建表mnesia:create_table(person, [{disc_only_copies, nodes()}, {attributes, record_i

2015-06-04 10:14:59 1763

转载 [Erlang]Mnesia过载write_thresold错误分析解决

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了。这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies 、disc_copies都可能会发生。如何重现这个问题,例子的场景是多个进程同时在不断地mnesi

2015-06-04 10:09:24 1871

转载 [Erlang]数据粘包及packet详解

我们知道,erlang实现的网络服务器性能非常高。erlang的高效不在于短短几行代码就能写出一个服务端程序,而在于不用太多代码,也能够写出一个高效的服务端程序。而这一切的背后就是erlang对很多网络操作实现了近乎完美的封装,使得我们受益其中。文章将讨论erlang gen_tcp 数据连包问题及erlang的解决方案。数据连包问题,这个在client/server的通讯中很常见。就是,当cli

2015-06-03 18:19:45 3772

转载 [Erlang]ErlangVM的心跳机制

我们写的程序不可能都没有bug,特别是项目越做越大,代码越来越多的时候,系统出错导致崩溃的可能性越来越大。而很多时候引发系统崩溃的来源可能不是致命性的,比如程序长时间运行,操作系统资源调度问题,或者是偶然的系统突发问题等等。那么,如何防止erlang猝死导致服务的长时间中断,erlang也给了我们答案:erlang心跳机制。erlang心跳机制什么是erlang心跳机制?这是erlang运行时系统

2015-06-03 17:57:52 1613

空空如也

空空如也

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

TA关注的人

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