在使用过程中,发现了sub binary的优化似乎有Bug,先上代码:
-module(dame_shit).
-export([main/0, dame_shit/1, dame_shit2/1]).
dame_shit(Bin) ->
dame_shit(Bin, <<"\r\n">>, not_found).
dame_shit(Bin, _, found) ->
{found, Bin};
dame_shit(<<Tag:2/bytes, T/binary>>, Tag, not_found) ->
dame_shit ...
在Erlang的 DOC erl5.6.3/doc/efficiency_guide/binaryhandling.html#4 中,第四章提到了Binary的优化。由于虚拟机经过了改良,一些在R11B使用的Binary优化技巧,在R12B就不推荐使用了。
特别注意的是sub binary的使用。举个例子,从一个大的Binary中取出以某个字节结束的一句:
extract_str_end_with_tag(Data, Tag) ->
extract_str_end_with_tag2(Data, <<>>, Tag).
extract_str_end_with_ ...
maillist有人提供了一种简单的UUID生成方法:
引用1> crypto:start().
ok
2> <<I:160/integer>> = crypto:sha(term_to_binary({make_ref(), now()})).
<<41,73,124,217,87,62,82,238,224,153,122,195,244,246,157,
142,88,71,76,61>>
3> lists:flatten(io_lib:fwrite("~40..0s", [erlang:integer_to_list(I, 16)])).
"29497CD ...
最近有些空,继续捣鼓consisten hash的简单实现。先前修改gb_trees,加入了lookup_nearest(Key, Tree) 函数,通过二叉查找和回朔,来查找最接近Key的项。昨天看了下xbaytable的DHT实现,发觉其实用ets会更快捷:
ets:prev(Table, Key) 和 ets:next(Table, Key) 函数,可以返回Table中Key的上一个或下一个存在的键,无论这个Key是否存在于Table中。再加上 ets:first/1、ets:last/1、ets:lookup/2,就可以实现了。
实践过程中发现了个问题,需要定义这个哈希范围的最大值 ...
突然想做IP库的解析,用Erlang,自然就碰到了Big Endian & Little Endian的事
IP在DB文件中是以little endian存储的,跟搜索的IP比较时需要转换为一个Int值,Python代码可以这样:
ip = unpack('I', buf)[0]
将一个IP串转换为Int值,则是
ip = unpack('!I', socket.inet_aton(ip))[0]
两者都转换为int之后就可以直接比较了
Erlang里面可以用Binary进行匹配,非常方便。
Little Endian 存储的Binary转Int:
1> <<Int:4/ ...
先推荐两篇文章:
http://www.wagerlabs.com/blog/2008/02/parsing-text-an.html
http://ppolv.wordpress.com/2008/02/25/parsing-csv-in-erlang/
(都需要爬墙访问,该死的‘功夫网’)
Erlang中解析文本协议,使用Binary无疑是高效的选择,但是我发现,文章中,对Binary中各个字节组合为字符串,都是使用list的:
NewList = lists:reverse([Char|OldList])
而不是
NewList = binary_to_list(<<Old ...
以前不是很了解Erlang网络编程中流量控制,现在做一下笔记。
Erlang中Socket设置了{active, true}之后,接收到的网络消息会通过{tcp, Socket, Data}的格式主动发送给进程,这样做有个弊处就是没有做流量控制。要是有个客户端疯狂发包过来,服务器不做处理就等着堆溢出。
在《Programming Erlang》的14.2里面,介绍可以使用 {active, once} 来做控制。
{ok, Listen} = gen_tcp:listen(Port, [..,{active, once}...]),
{ok, Socket} = gen_tcp:ac ...
一直一来没有留意到这个问题,今天偶尔在blog上看到,就标记一下,别让自己忘记了。
文章在 http://easyerl.blogspot.com/2007/10/high-order-functions-must-be-tested.html
测试代码如下:
1> Filter = fun(Elem) -> fun({Elem, _, _}) -> true; (_) -> false end end.
#Fun<erl_eval.6.49591080>
2> C = Filter(cpu).
#Fun<erl_eval.6.49591080>
3> C({test ...
- 14:40
- 浏览 (354)
- 评论 (0)
maillist上面对 “VM & BEAM Specs : idea for improving, the lists support”的争论很有意思,我也随手测一把看看
JDK 1.5.0_11
Erlang/OTP R11B-5
$ javac ListAppend.java
$ /home/jdk/bin/java -server ListAppend
Total time:3439ms
$ erlc list_append.erl
$ erl -noshell -noinput -s list_append main -s init stop
Total time:4408ms
...
- 12:09
- 浏览 (600)
- 评论 (1)
http://www.trapexit.org/index.php/Distributed_erlang_using_ssl_through_firewalls
这篇文章提供了一种使用ssl连接来实现Erlang各节点间通信的方法。
但是我的同事经过试验,两个节点是ping不同的,这几天有人在网上提供了一个patch来解决这事情,但是patch有点问题,需要对源文件进行修改之后才能使用patch,这里提供一下patch后的文件和源文件。
- 20:41
- 浏览 (403)
- 评论 (0)
- 浏览: 23891 次

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
对Socket的{active, true} ...
不会溢出。 inet:setopts {read_packets, N} 这个参 ...
-- by mryufeng -
[笔记]用ets实现了把一 ...
ets肯定会比gb_tree快 毕竟是c实现的 推荐大量使。事实上erlang的 ...
-- by mryufeng -
erlang module pg2
好像不能下载代码了。能不能也发一份给我。dotwoo@gmail.com 谢谢了 ...
-- by dotwoo -
Java 和 Erlang 的列表元 ...
这个层面效率应该差不太多
-- by mryufeng -
erlang module pg2
openpoker好像已经商业化了...兄台有源码? 能不能发给我一份? fl ...
-- by aol






评论排行榜