`
cwqcwk1
  • 浏览: 86775 次
文章分类
社区版块
存档分类
最新评论
文章列表
protobuf是google开源的序列化工具,类似xml,json,基于二进制,比XML表示同样一段内容要短小得多,还可以定义一些可选字段,用于服务端与客户端通信。google没有提供对erlang语言的直接支持,所以这里使用到的第三方的protobuffs库,文章在这个库的基础上做一些改进。 在开始阅读这篇文章前,先了解一下原来erlang版的protobuf使用例子。改进版的protobuf代码及例子在这里(下载地址)。欢迎下载,有什么问题可以评论反馈。 改进protobuf 改进调用方法 原来调用比较别扭,每个协议都是不同的方法名: encode() -> Per ...
Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。文章收集一些常用 mnesia 使用技巧。 mnesia判断表是否存在 %% 确保已经 mnesia:start(). lists:member(Tab, mnesia:system_info(tables)). mnesia检查数据库是否创建 case mnesia:system_info(use_dir) of true -> alread_created; _ -> mnesia: ...
protobuf 是google开源的一个序列化框架,类似xml,json,最大的特点是基于二进制,比传统的XML表示同样一段内容要短小得多。还可以定义一些可选字段,用于服务端与客户端通信。前面几篇文章说了protobuf的用法,看到网上也没有分析protobuf协议的文章,就利用一些时间写了protobuf 的协议分析,希望大家喜欢。 protobuf协议核心思想 基于128bits的数值存储方式(Base 128 Varints) 数据表示方式:每块数据由接连的若干个字节表示(小的数据用1个字节就可以表示),每个字节最高位标识本块数据是否结束(1:未结束,0:结束),低7位表示数据内容。( ...
前面的文章有讲过erlang热更新,只是大概介绍,现在再深入一点讲erlang的模块热更新。erlang的热更新是模块级别的,就是一个模块一个模块更新的。 热更新是什么,就是在不停止系统的情况下对运行的代码进行替换。 如何进行热更新? c(Mod) -> compile:file(Mod), code:purge(Mod), code:load_file(Mod). 以上就是shell c(Mod) 的主要代码,3个步骤:编译新的代码,清除旧代码,加载新代码 同样, l(Mod) 的主要代码如下,少了编译过程: l(Mod) -> code:purge(Mod), co ...
Erlang除了提供try catch,catch等语法,还支持link和monitor两种监控进程的机制,使得所有进程可以连接起来,组成一个整体。除了这样,erlang还提供trap_exit方法让进程主动捕获异常退出消息,避免发生异常时被系统关闭。 trap_exit说明 erlang设计上有速错(fast on fail)的原则,就是让问题快速暴露,迅速停止这个进程的运行,以避免这个进程错误执行造成更多的错误。但是在业务层需要容错,所以erlang就把选择权交给用户,通过process_flag(trap_exit,true)来避免进程被异常关闭。 -module(test). -comp ...
之前做过hadoop的测试,测试了hive/impala对hbase数据的查询,这里以hive为例,impala查询hbase数据也类似。 hbase访问方式 NativeJAVA
Erlang节点之间的通讯,主要用于两个Erlang节点之间的通讯,但Erlang还支持与java构建的节点通讯,甚至与c构建的节点通讯,前面两种方式在我以前的文章都有讲到,所以这里讲Erlang与c构建的节点通讯。 Cnode与erl_interface 想用C构建 ...
erlang更新到R17已有一段时间了,公司项目打算从旧版的erlang迁移到R17,却不料有不少的困扰,其中一个问题是中文问题。 这个问题很容易重现:新建一个文件t.erl,保存为utf-8无bom格式 -module(t). -export([test/0]). test() -> ["我", <<"我">>].在旧版的erlang中,下面的代码能正常工作,结果就是: Eshell V5.9.1 (abort with ^G) 1> c(t). {ok,t} 2> t:test(). [[230,136, ...
erlang本身提供一个接口,可以用来检查模块是否有导出函数,这个接口是erlang:function_exported/3,但是很多时候这个接口无法正常使用。 下面重现一下这个问题: 1> erlang:function_exported(crypto,start,0). false 2> crypto:start(). ok 3> erlang:function_exported(crypto,start,0). true 注意:例子中并不是说一定要crypto:start()才能使用这个函数,只是说这个函数确实存在。 现在,来看下erlang对这个接口的说明: Retu ...
erlang有两种复合结构,tuple和list,两者的区别是tuple子元素的个数是固定不变的,声明后就不能改变了;而list是可变的,可以通过[H|T]来取出或插入新元素。上篇文章讲了tuple相关的内容,本篇就讲erlang list方面的知识,主要说一 ...
分布式是erlang的三大特性之一,都说erlang分布式,最简单最直接的应用就是节点通讯。 问题来了,怎么节点通讯,节点连接可能很多人知道,如何在两个节点连接后进行本地与远程通信?这就是本篇所讲的内容。 下面是示例代码,完成2个节点的通讯: A节点的代码: -module(server_demo). -export([start/0, rpc_call/2]). start() -> Pid = spawn(fun() -> server_loop() end), register(demo, Pid), %%注册进程名字 ok. server_loo ...
借助SecureCRT,可以轻松使用上传本地文件到linux服务器、或者从服务器下载文件到本地。 这里要借助两个实用的linux命令: sz 可以将服务器的文件下载到本地(Send Zmodem) rz 则是把本地文件上传到服务器(Receive Zmodem) rz,sz是Linux同Windows进行ZModem文件传输的命令行工具,比ftp命令方便很多,而且不用打开ftp服务。 sz命令: sz filename sz dir/* 这个命令从服务器下载文件到本地,本地目录地址为SecureCRT设定的指定保存目录: 设置方法:Options > Session ...
今天在Centos6.5下安装erlang,过程真是一波三折,总结一下: 下载erlang源代码包,选择版本,这里以erlangR16B03为例作说明: wget http://www.erlang.org/download/otp_src_R16B03.tar.gz tar -zxf otp_src_R16B03.tar.gz cd otp_src_R16B03 mkdir -p /home/erl ./configure --prefix=/home/erl make && make install ln -s /home/erl/bin/erl /usr/bin/ ...
Glibc 包含了linux一些主要的C库,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等。 centos默认的glibc版本比较低,不支持一些新的应用,所以对glibc进行更新,发现编译glibc报一个错误: Makeconfig:42: *** missing separator. Stop 看了glibc文档发现,glibc不能在源代码目录编译,建议在源码目录上层新建一个目录glibc-build,用于编译 $ wget http://ftp.gnu.org/gnu/glibc/glibc-2.19.tar.gz $ tar -zxf glibc-2. ...
我们知道,erlang在开源社区的活跃度远远不及java社区,在java社区中有很多优秀的开源框架,比如struts、hibernate、 spring、hadoop、hbase等,为了让erlang和java社区的众多开源框架相结合,让他们优势互补,可以让erlang来调用java写的中间件。 erlang提供了一个Jinterface代码包,java可以和erlang建立节点通信。通过这种方式,erlang可以将 java构建的节点也当作erlang的一个节点,java可以接收erlang传过来的消息,并且处理之后以异步的方式发送处理结果。 erlang与java构建的节点通讯 安 ...
Global site tag (gtag.js) - Google Analytics