`
AvinDev
  • 浏览: 113339 次
社区版块
存档分类
最新评论
文章列表

Boot Server 启动

如何让多台Server上的Erlang进程启动时只加载远程服务器上面的模块,在kernel的文档里面谈到了一下,同事经过试验,初步能启动进程了,这里记录一下 boot server:192.168.0.2 slave server:192.168.0.3 在boot server输入: 引用erl -kernel start_boot_server true boot_server_slaves '[{192,168,0,2}, {192,168,0,3}]' -name foo@192.168.0.2 -setcookie 123456 在slave server输入: 引用erl -n ...
是个Undocument的Flags,记录一下: erl -name foo@192.168.0.2 -kernel inet_dist_listen_min 8080 -kernel inet_dist_listen_max 8090 这样该节点在epmd中注册和监听的端口就会在8080-8090间,方便在防火墙中设置规则
CEAN1.3出来了,试试那个iconv还能不能用,在Windows下不行 经过邮件咨询,原来目前只能用于Linux x86下,其他平台以后会实现。 尝试一下将GBK编码流转换为UTF8编码,就用最简单的例子, GBK格式的 “你好”,转换为UTF8后应该在GBK环境下显示 “浣犲ソ”,可以参见 这篇文章 在Windows环境下(GBK),获取 你好 的字节 引用1> io:format("~w~n", [<<"你好">>]). <<196,227,186,195>> 在Linux下(UTF8), ...
Note:首先要了解,Erlang里面的列表,比如 [1,2,3,4],其实是这样的方式来存储 [1,[2,[3,[4]]]],因此在头部插入一个元素,很简单,但是在尾部插入就比较困难了。 闲来对Erlang中的2个列表操作进行了测试,先上代码: -module(test_list). -compile(export_all). main() -> test_concat(), test_flatten(), test_append_tail(), test_append_header(). test_concat() -> ...
NOTE:修正了一个Bug,加入了能否求解的数学算法判断,代码更新了 算法学的不好,一直没有写什么算法程序。之前一直想写个A*的,研究了一下,最终还没有写成。昨晚花了点时间,用Erlang写了个解八数码的程序,用的是最简单的A*,程序没有做什么优化,中规中矩,偷懒用模式匹配来处理移动情况。如果想看更加优雅的Erlang算法程序,可以查看我在附件提供的sudoku.erl,里面大量使用了高阶函数:) 注意: 0.八数码还是比较简单的,不像华荣道和推箱子那么BT,大部分情况在我的机上都能1s内解决,因此暂时不优化啦。 1.Open Table 和 Closed Table都是用的list,O(N ...
注:这篇文章可能会有争议,欢迎提出意见 在Erlang中,如果要实现两个远程节点之间的通信,就需要通过网络来实现,对于消息发送,是使用TCP。如果要在两个节点间频繁发送消息,比如每秒几百上千条,那样就要注意了。 无论是网游服务器开发的书籍,或是经验老道的工程师,都会告诉你,在发送数据包时,尽可能把小的消息组合为一个比较大的包来发送,毕竟一个TCP包的头也很大,首先是浪费带宽,其次调用底层发送的指令也是有开销的。有工程师告诉我,一般每秒大概是2W次左右。 简单测试一下,先是代码 一个接收消息并马上抛弃的Server: start() -> register(nullserv ...
今天无意中发现这个功能。。。 http://ejabberd.jabber.ru/interconnect-erl-nodes 在下载的 getting_started-5.0.1.pdf 那里也有这个topic:《Advanced Shell Usage - Job Control Mode》,不知道为何官方html格式的文档那里消失了 简单来说是这样,比如节点 foo@192.168.0.2 启动了一个daemon 引用erl -name foo@192.168.0.2 -setcookie 123456 -noshell -noinput ... 如果要管理它,可以这样: 引 ...
在Erlang中,要处理字符串编码的转换,可以使用iconv,目前CEAN的发行版本,ejabberd和iconv模块里面都有iconv的库,但是都无法正常运行(提示版本不兼容),但是在ejabberd的安装包可以使用。经过比较,发现是 erl.exe,erlexec.dll,beam.dll 这三个启动程序的问题,ejabberd的是V5.5.2.2,而CEAN1.2和ErlangOTP R11B4都是V5.5.4,可能两个版本跟iconv的c port不兼容。 下面就以ejabberd的erlang版本来说明: 首先启动port 引用1> iconv:start(). {ok,&l ...
好久之前捣鼓过的东西,怕忘记了,记录一下。 一个简单实现了OTP的Server:echoline,一个Helloworld级别的OTP应用,目录结构如下: ./src/echoline_app.erl ./src/echoline_sup.erl ./src/echoline_server.erl ./src/tcp_server.erl ./ebin/echoline_app.app ./priv/ ./include/ ./echoline_rel.rel ./Emakefile 这是一个普通的Erlang应用,可以直接使用 erl -make 来编译, Emakefile 内容如下: ...
《轻松实现可伸缩性,容错性,和负载平衡的大规模多人在线系统》一文里面对“Erlang的分布式进程组(Distributed Named Process Groups)”大吹特吹,就是说的pg2这个module。文档那里虽然写了支持分布式节点,但是并没有说如何如何,只提供了一个join(Name, Pid)。 看了一下openpoker的源码,原来很简单,对于连接上的node,用 which_groups() 多调用几次就可以同步过来了: 主节点先创建一个Group: 引用(foo@localhost)1> pg2:create(group). ok (foo@localhost)2> ...
Java里面要实现Code Replacement,也就是什么热部署,通常是使用ClassLoader机制。不久前看到了一篇Google的Paper,里面讲解的C++代码热部署更为复杂。 在Erlang里面,实现Code Replacement其实很简单,最方便的方法可以参考 《Erlang Reference Manual》的12.3: -module(m). -export([loop/0]). loop() -> receive code_switch -> m:loop(); Msg -> ...
163的zhousen写了几篇文章,《谈分布式网络程序设计》 http://q.163.com/dirgroup/blog/zhousen.zju/1802920067811231290/#1802920067811231290 http://q.163.com/dirgroup/blog/zhousen.zju/1802920067123113984/#1802920067123113984 http://q.163.com/dirgroup/blog/zhousen.zju/18029200672093930660/#18029200672093930660 简单谈谈感想。 1.网络数据 ...
Erlang的分布式通讯安全策略,可以归结为 All or None。要不拥有全部的权限,要不就完全没有。 它的节点安全设置,是通过一个magic cookie来实现的。这个文件默认放到 $HOME/.erlang.cookie ,文件内容是字符串。 当启用分布通讯的时 ...
http://www.pkblogs.com/montsamu/2007/02/erlang-parallel-map-and-parallel.html Joe Armstrong 提出了一个pmap实现 pmap(F, L) -> S = self(), Pids = map(fun(I) -> spawn(fun() -> do_f(S, F, I) end) end, L), gather(Pids). gather([H|T]) -> receive {H, Ret} ...
gen_tcp:listen(Port, Options),Options 为一个参数列表 之前介绍过 {active, Boolean} 这个 opt,现在介绍一下 {packet, PacketType} 引用{packet, PacketType} (TCP/IP sockets) Defines the type of packets to use for a socket. The following values are valid: raw | 0 No packaging is done. 1 | 2 | 4 Packets consist of a header s ...
Global site tag (gtag.js) - Google Analytics