Erlang 编程实战
Erlang 关于游戏开发的项目经验与编程要点。
lee_鹿游原
Talk is cheap. Show me the code
展开
-
Erlang使用Elasticsearch、Logstash、Kibana搭建日志平台
1.简介将Erlang运行时产生的Log,通过ELK(Elasticsearch、Logstash、Kibana)进行查看分析。 2.安装2.1 Erlang相关:Erlang 20+https://github.com/lambdaclass/lager_logstash_backend 这是扩展的功能库如果你使用Rebar3,将其依赖添加到配置文件。如果没有使...原创 2018-09-03 17:37:09 · 799 阅读 · 0 评论 -
Erlang网络编程中的一个特别的函数prim_inet:async_accept/2
为了研究怎么用Erlang写一个游戏服务器,我很幸运的下到了一份英雄远征的服务器Erlang源码,这两天花了点时间看代码,其中看到做TCP的accept动作时,它是用的一个函数prim_inet:async_accept/2,这个可跟书上说的不一样(一般来说书上教的是用gen_tcp:accept/1),于是我google了一下,发现找不到文档,再翻一下发现已经有不少人问为什么这是转载 2013-12-25 17:18:21 · 8626 阅读 · 1 评论 -
erlang与as3 socket解析
这个解析类是我现在项目中用到的一个as3与erlang sokcet通信的一个类。 解析出来的数据是数组。本想做成object的, 不过这得服务器那边配合. 服务器这边的工作量就会加大了, 因为每一个值都要加一个元素符这样才能构成object基本的组成元素。我们的做法是:服务端那边返回的数据,在协作平台上把数据元素列出来, 前端做开发就参考这个数据列表来做开发 。BertClass转载 2013-12-25 17:24:44 · 1488 阅读 · 0 评论 -
Erlang 异步accept
-module(myserver).-behaviour(gen_server).%%define-define(POLICY_PORT,8080). %%监听端口-record(state, {callback, sock, ref,disable_connect}).%%%gen_server callback-export([init/1, handle_call/3, h原创 2013-12-25 20:37:51 · 1986 阅读 · 0 评论 -
Erlang代码反编译以及查看汇编码
Erlang的代码是先翻译成abstract_code,再到目标代码的,如果有符号信息很容易恢复源代码,通常我们部署系统的时候需要把符号信息去掉,reltool就可以干这个事情!我们演示下:$ cat server.erl-module(server).-compile(ex转载 2014-01-06 13:59:41 · 2801 阅读 · 1 评论 -
Erlang Application
整个Erlang/OTP生态系认的目的就在于构建稳定、容错的系统。应用是Erlang对相关模块进行打包的一种手段。打包的目的并不在于发布,而在于使这些模块成为一个整体。有一部分OTP应用仅仅是提供他人调用的库代码,但大部分应用都具有自己的生命周期:启动,完成预设任务,最后关闭。部分应用可以同时运用多个实例,另一些应用仅限一个。原创 2014-04-27 11:50:21 · 1658 阅读 · 0 评论 -
Erlang工具和组件
Erlang组件Erlang具有许多单独的组件,它们能够在开发应用时作为组建块(building blocks)使用。同时这些组件也熟知Erlang的系统消息(load、unload、start、stop、restart、change code)。Inets - HTTP 1.0服务器和FTP客户端。Mnesia - 使用Erlang的分布式实时数据库。它支持RAM复制、磁转载 2014-04-27 14:20:54 · 974 阅读 · 0 评论 -
Erlang inet:setopts
inet:setopt有packet设置选项:{packet, PacketType} (TCP/IP sockets)Defines the type of packets to use for a socket. The following values are valid:raw | 0No packaging is done.1 | 2 | 4Packe原创 2014-04-29 16:41:51 · 2232 阅读 · 0 评论 -
Erlang gen_tcp补充(1)
gen_tcp.erlaccept(S) -> case inet_db:lookup_socket(S) of ①{ok, Mod} -> %% Mod 要么是inet_tcp, 要么是inet6_tcp. Mod:accept(S);Error -> Error end.inet_tcp.erlaccept(...原创 2014-04-30 17:20:32 · 1889 阅读 · 0 评论 -
C++ 与 elang 通信注意问题
1.采取二进制流方式通信,erlang需要进行二进制解析2.erlang 虚拟机二进制流是大端,相同 AS3 和 JAVA虚拟机同样二进制流也是大端,而C++依赖于cpu架构,因为网络字节序都是用大端。固C++收发数据需要相对自身大小端转化。3.可以用 term_to_binary binary_to_term 进行传输,不过C++端需要做一些逻辑解析,这个因地制宜吧,需要可以这样做、另...原创 2014-06-19 18:05:53 · 993 阅读 · 0 评论 -
Erlang gen_tcp补充(2)
这次讲的是gen_tcp:send 的阻塞 与 直接调用 erlang:port_command的非阻塞。————————————————————————————————————————————————————————gen_tcp.erl 源码在 kernelgen_tcp.erlsend(S, Packet) when is_port(S) -> case inet_db:l原创 2014-07-05 20:21:02 · 1550 阅读 · 0 评论 -
Erlang 的 pid解释
erlang保证1个cluster内Pid是唯一的:Pid的值A是节点id,也就是节点名称的内部索引,由于不能在cluster里有相同的node (short)name,因此不同node上的进程A值肯定不同。在本地节点时,该值总为0B,内部进程表里的内部索引,值为0 -> MAXPROCSC,序列号,每当进程数超过MAXPROCS时,加1原创 2014-07-16 15:34:44 · 3910 阅读 · 0 评论 -
Erlang的并行编译与加密
1.首先Erlang防止反编译 , 有2种方法 ,原创 2014-07-25 17:54:38 · 3146 阅读 · 0 评论 -
Erlang Edoc文档生成
1.要生成类似于erlang的文档 , 模块的代码注释必须按照erlang的规则走。Erlang edoc原创 2014-08-12 11:25:18 · 1893 阅读 · 0 评论 -
Erlang SASL
sasl是一个应用,sasl的一个重要功能便是可以记录系统进程相关日志,如进程启动、结束、崩溃错误等信息。sasl的日志功能是基于erlang自带的日志模块error_logger来实现的原创 2014-09-03 11:04:31 · 3400 阅读 · 0 评论 -
Erlang Robot
自己写的简单测试的robot , 只有登录,其它消息自己修改模拟~~原创 2014-09-13 15:08:20 · 1077 阅读 · 0 评论 -
Erlang HiPE
HiPE(High Performance Erlang) 霸爷有一个一语中的的描述"erlang的hipe相当于jit, 根据语言评测有hipe支持在纯erlang的运算上会快2-3倍,这个性能的提升对于计算密集型的应用还是比较可观的。"编译启用HIPE选项可以这样:c(Module,[native,{hipe,HipeOptions}|MoreOptions). 或转载 2014-11-13 16:04:43 · 3115 阅读 · 0 评论 -
Erlang语言 基于LLVM的高性能Erlang(Hipe)尝鲜
即将发布的R17A版本引入很重要的一个针对性能提升的特性:”Support the LLVM backend in HiPE”,具体改变参见这里. 我们知道Erlang是一门领域语言,第一天就是为电信工业高可用,集群和热更新环境而设计的,语言的性能一开始不是重点。直到R12版本才加入SMP多处理器,充分适应多核化的硬件发展趋势,从此向着高性能大步迈进。Erlang的虚拟机是register转载 2014-11-13 16:36:29 · 1673 阅读 · 0 评论 -
[Erlang]前人挖坑,后人还要进坑?
1. 保护式(guard)中如果出错,不会报错,只会返回false!case 1=:1 of true when not erlang:length(t) =:= 1 orelse true -> ok; _ -> errorend.Result is: error保护式中对t (atom) 求len转载 2015-12-14 14:48:43 · 4373 阅读 · 0 评论 -
Mnesia动态添加节点杂记
FAQ List:1. 如果动态的添加一个节点到Mnesia cluster中2. 如何动态的从mnesia cluster中删除一个节点3. 在一个节点上演示将当前已有的表格分片fragment存储, 增加删除分片的方法4. 多个节点的分片测试5. 节点池node_pool如何保持存储的fragment在各个节点中的平衡?6. 总结Mnesia使用linear hashing线性哈希转载 2016-01-14 18:43:08 · 1673 阅读 · 0 评论 -
Erlang NIF简析
在Erlang调用C代码时,NIF(Native Implemented Function)是比port driver更简单和有效的实现方式,尤其是编写同步程序中,NIF是非常适合Erlang 的。1, 基本原理 NIF可以使我们可以用C实现相同的程序逻辑,但速度比用纯Erlang的快,跟C的速度很相近。 C语言编译生成的动态库(*.so)在Erlan转载 2016-05-10 15:07:10 · 991 阅读 · 0 评论 -
Erlang gen_server init
参考文章 http://youthyblog.com/2015/07/31/erlang-question-gen-server-and-init/很幸运能看到这篇文章,从而获得一种新的写法。平常都是用 timeout =0 ,做一些耗时或者初始化操作。伪代码:start_link(Args) -> proc_lib:start_link(?MODULE, init, [self()...原创 2016-09-06 17:05:03 · 1104 阅读 · 0 评论