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

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

原创 [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 7307

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

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

2015-06-25 14:23:52 6448

原创 [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 2084

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

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

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

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

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

2015-06-17 17:33:23 5121

转载 [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 1874

原创 [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 2995 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 2651

转载 [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 1564

转载 [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 2431

转载 [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 1791

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

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

2015-06-04 10:48:43 4755

转载 [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 2632

转载 [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 4884

转载 [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 4399

转载 [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

转载 [Erlang]整数与浮点数转换、进制转换

Erlang 整数与浮点数的转换、数字之间的进制转换,浮点数改变精度等等这些功能,Erlang BIF(Erlang内建函数)已经帮我们很好实现,调用他们也很方便,下面将简单说明如何去使用他们。erlang整数与浮点数转换整数转浮点数:[plain] view plaincopy% BIF函数  1> float(2).  2.0    % /转换  2> 2/1.  2.0    % math函

2015-06-03 17:54:10 2494

转载 [Erlang]如何使用NIF

在Erlang中,NIF(Native Implemented Function)被用来扩展erlang的某些功能,一般用来实现一些erlang很难实现的,或者一些erlang实现效率不高的功能。NIF使用C开发,效率和C接近,比纯erlang实现要高。NIF会编译成动态库,直接动态加载到erlang进程空间调用,也是erlang扩展新方法最高效的做法。调用NIF不用上下文的切换开销,但是也有代价

2015-06-03 17:45:26 3471

转载 [Erlang]各种系统限制总结

Erlang本身对进程数,原子长度等没有限制,但为了提高性能和节省内存,总会在实际实现中和运行环境中作出一些限制。1、进程数量缺省情况下同时存在的最大Erlang进程数量不超过2^18=262144个,最大值为2^27-1=134217727,是由于内存的限制在32位环境中这个数量不太可能达到。有效范围是1024-134217727。怎么知道实际中使用进程限制?[plain] view plain

2015-06-03 17:39:29 3044

原创 [Erlang]Mnesia的备份与还原

数据库在使用当中都会有数据库备份工作,当数据库发生严重错误无法启动,或者数据丢失时可以及时有效地恢复数据。文章首先介绍如何备份和还原Erlang Mnesia数据库,然后从备份、回滚两大方面深入探讨mnesia的备份机制。备份数据库在Mnesia启动后,可以使用mnesia:backup()备份,函数原型:mnesia:backup(Opaque [, BackupMod]) -> ok | {e

2015-06-03 17:36:21 1603

原创 [Erlang]Mnesia设置主键自增

Mnesia是erlang/otp自带的分布式数据库管理系统。mnesia配合erlang的实现近乎理想,但在实际使用当中差强人意,总会有一些不足。mnesia数据表没有主键自增的功能,但在mnesia函数中有一个自增函数可以用来生成自增的id,在后面的内容将讲述如何实现主键自增的功能。参照SQLite的做法,就是在数据库中单独建立一个的sqlite_sequence表来做其他表的自增索引表。同样

2015-06-03 17:19:14 1456

原创 [Erlang]如何防止beam文件的反编译

erlang自带了类似makefile的功能,Emakefile,可以自动化编译整个erlang项目的代码,使用非常方便,直接运行erl -make即可自动化编译。Erlang项目编译一个简单的例子,保存为Emakefile文件:[plain] view plaincopy{'src/*',    [debug_info,      {i,"include"},      {outdir,"ebi

2015-06-03 17:16:23 3142

转载 Protobuf协议格式详解

protobuf 是google开源的一个序列化框架,类似xml,json,最大的特点是基于二进制,比传统的XML表示同样一段内容要短小得多。还可以定义一些可选字段,用于服务端与客户端通信。前面几篇文章说了protobuf的用法,看到网上也没有分析protobuf协议的文章,就利用一些时间写了 protobuf 的协议分析,希望大家喜欢。protobuf协议核心思想基于128bits的数值存储方式

2015-06-03 14:27:39 19881 5

转载 [Erlang]erlang与php的通信

网络通讯常用的有2种:文本通讯和二进制通讯。php与erlang之间文本通讯比较简单,这里不做讨论,主要讨论php与erlang实现二进制通讯。通讯示例erlang端代码:[plain] view plaincopy-module(server).  -export([start/0]).    -define( UINT, 32/unsigned-little-integer).  -defin

2015-06-03 12:21:18 2130

转载 [erlang]erlang与C++的两种通讯方式

网络通讯常用的有2种:文本通讯和二进制通讯。文章分别在两种方式上实现erlang与c++通讯。一、erlang 与 c++ 行通讯行通讯是一种文本通讯,格式如“cmd args\n”,比较简单,erlang接收数据也比较简单,可以设置参数 {packet, line} ,缺点是表示方式单一,很难表示结构数据。1、erlang 代码(server.erl):[plain] view plaincop

2015-06-03 11:58:56 2381

转载 [Erlang]Mnesia模拟mysql操作

Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明  Mnesia 数据库如何实现SQL查询,实现select / insert / update / where / order by / join / limit / delete等SQL操作。示

2015-06-03 11:38:20 1407

转载 [Erlang]比特语法详解,看看你知道多少

Erlang的比特语法(Erlang Bit Syntax)提供了一种方法来匹配二进制数据,这使得Erlang二进制对象在某种程度上等同于其他Erlang对象,如元组和列表。也因为其快速高效,使得在Erlang中,二进制对象被广泛使用,尤其是在协议编程方面。(官方文档)Erlang的比特语法表达式:[plain] view plaincopy>   >  每个元素Ei指定了一段二进制串(bit s

2015-06-03 10:30:50 1997

转载 [erlang]erlang学习资料大全,新老手均适用!

转载自:http://blog.csdn.net/mycwq/article/details/43115733最近有朋友想学习erlang,问我有什么好入门的学习资料。我也借此机会整理一下下载地址:http://download.csdn.net/detail/cwqcwk1/8395531入门资料:erlang文档手册(最适合入门)erlang编程介绍erlang位运算与二进制解析erlang二

2015-06-03 09:48:26 1985

原创 [Erlang]VM启动参数研究

原文见于%erlang安装目录%/erts-版本号/doc/html/erl.html,选择了一些自己用过的,或者觉得重要常用的参数记录一下,备查。 erlang启动参数有3种:emulator flags, flags 和plain arguments。emulator flags 是以“+”开头的,用来控制模拟器的行为,附送一个非常实用的例子: [plain] view plaincopyC:

2015-06-03 09:38:12 2656

空空如也

空空如也

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

TA关注的人

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