`
bachmozart
  • 浏览: 111692 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
关于erlang进程hibernate的好处,去过这次erlang大会的同学应该已经都知道了 简单的理解: hibernate可以使你闲置的erlang进程马上进行gc,因为进程处于receive状态下是不会gc的 我在性能调优时发现,gc对于消息发送速度的影响还是非常大的 关于erlang gc问题也可以参看这个 引用 Recently, as part of RabbitMQ server development, we ran into an interesting issue regarding Erlang’s per-process garbage collection. If ...
关于erlang提供的gen_fsm有限状态机模型,可以说是很好很强大,正是有了它,才使erlang编写复杂业务逻辑成为一件轻松愉快的事情 但是由于erlang的速错设计原则,我们的状态机进程可能在某些异常下直接退出,这点可能跟我们的需要有点背离 最常见的情况是,状态转移中的错误处理问题,如下代码: %% ==================================================================== %% Interface Function %% ============================================== ...
今天花了大半天时间给前端flash同学解释TCP相关的原理和细节,并陪同一起写完了与erlang服务器的通信模块 flash socket一般2种,xmlSocket和 socket(binary),xmlsocket基本也是flash自己封装的啦 由于服务器是用的erlang,erlang已经提供了处理TCP协议,自动拆解包头的方法,也就是 {packet,N}这种用法了,那自然就用不着自己去做底层粘包,判断packet是否是一个完整应用层协议包的细节了 也就是说,服务器端和flash通信 格式是这样的: ------------------------ |N bytes header| ...
之前发帖抱怨过erlang inet http client的性能很糟糕并且有严重bug litaocheng同学曾建议使用ibrowse,正好目前有项目需要一个http client, 遂下载查看源码学习之(erlang周边项目基本可以放弃只看doc就可以使用的想法) ibrowse启动首先会读取priv下的配置文件,默认为ibrowse.conf 格式: {dest, Hostname, Portnumber, MaxSessions, MaxPipelineSize, Options}. 程序是通过file:consult()这个读取的,所以应该知道什么格式了 其实程序中会保存这个配 ...
开始规模研究tsung的源代码,代码不多,看起来应该不会太费力,先参考这些资料 老大的2篇博客: http://mryufeng.iteye.com/blog/355827 http://mryufeng.iteye.com/blog/355716 其中还提到一个writing tsung plugin http://www.process-one.net/en/wiki/Writing_a_Tsung_plugin/ 都看了一遍,然后基本明白怎么用后,就该研究如何编写plugin了 tsung 基本就分3部分,controller,client和recorder,如果不是自己录制http压 ...
erlang 调用 gen_tcp:accept时是会阻塞的,包括后续的gen_tcp:recv也是,但是这个阻塞实际是在erlang这边 receive等待driver返回消息,并不是阻塞在driver上,driver是不能阻塞的,这个mryufeng老大也很早就跟我说过,当时没明白,现在终于理解了 看下erlang 这边是如何做的 accept0(L, Time) when is_port(L), is_integer(Time) -> case async_accept(L, Time) of {ok, Ref} -> receive { ...
erlang 与外部通信有2种方式: A. 外部port,外部程序通过stdin,stdout与erlang交互 B. linkin driver 是erlang 直接调用的方式 从效率上看,当然是B的效率最好,一直觉得这个东西是非常有用的,以前也有些idea,请教过yufeng老大,结果被教育 ...
准备用erlang做网游的服务器端,遇到一个通信层设计的问题 erlang socket大多都是使用的被动模式,防止message flood问题 系统中会存在两种消息,一种是客户端和服务器的交互信息,就是简单的request-response模式,另外一种是系统游戏过程中产生的广播消息 如果采用erlang被动socket模式, recv()方法本身是阻塞等待客户端请求的,同时系统广播消息可能会随时产生,那么阻塞的进程就无法及时取到当前mailbox里的消息,发给客户端了 目前打算采用客户端同时开2条TCP连接的方式解决。一条用于处理交互信息,另一条只处理当前系统的广播消息 代价就是 ...
调用gen_server启动的方法 gen_server :start_link ( { local, ?MODULE } , ?MODULE , [ ] , [ ] ) . 参数分别是Name,Mod,Arg,Options Options里可以设置timeout gen.erl里的简单小函数取得timeout timeout(Options) -> case opt(timeout, Options) of {ok, Time} -> T ...
试了下inets的http client,调用http:request方法,在单个进程内少量调用,或多个进程内少量调用都没有问题,但是只要调用次数达到几千以上,就会报错 错误信息基本就是bad_return_value,invalid version等等 不知道有没有人试过 大名鼎鼎的Richard Jones在 A Million-user Comet Application with Mochiweb里面的那个floodtest的例子,一样会报这个错误 receive {http,{_Ref,stream_start,_X}} -> recv({Active+ ...
1.In general, it is more efficient for the application to write large messages and have them fragmented and reassembled by IP, than to have the application write multiple times. 原因就在于系统调用system_call从应用态转到内核态等系列复杂过程带来的性能的损耗 2.tcp_sendspace TCP send buffer size can limit how much data the applicatio ...
启动创建好的skeleton时,skel.erl调用application:start(),根据skel.app,启动skel_sup.erl 的supervisor,规格 %% @spec init([]) -> SupervisorTree %% @doc supervisor callback. init([]) -> Ip = case os:getenv("MOCHIWEB_IP") of false -> "0.0.0.0"; Any -> Any end, WebConfig = [ ...
不知为什么,我看书的效率总是比较低,吸收的不多,反而看代码会觉得比较有意思,也能更集中精力,programming erlang看了也2遍了,基本除了语法熟悉了外,对具体应用还是一点都没明白,直到发现了mochiweb,这东西代码好少呀, ...
简单实现了下memcached binary protocol的 get和 set command,体验了下erlang binary语法的强大和方便 代码: -module(binary_server). -export([start/0]). start() -> {ok,Listen}=gen_tcp:listen(7777,[binary,{packet,0},{reuseaddr,true},{active,true}]), register(kvs,spawn(fun() -> dict() end)), accept(Listen). a ...
.....
Global site tag (gtag.js) - Google Analytics