erlang tcp active 模式

gen_tcp 的 active的值为once在编程上实现控制,

如果采用了非被被动模式,

虚拟机会把接受到的信息用一种消息的方式发给进程邮箱。

 

譬如下面是服务器接收的一段http请求,receiver:是每次接收的提示信息,

这里可以看到http其实是按照先后顺序发上来的,如果服务器是做http的,

用到once模式是最好不过的,如在第一条receiver匹配成功检查格式正确后再决定是否接收

后面的,如果第一条就不对,后面就没有必要再去取,这种数据有种依赖关系,

假如下面的所有匹配被分别看成是A,B ...J的话,如果不用once,那么你的loop体大概是

这样

 

loop() ->

    A ->done;

    B->done;

    ....

    J ->done

 

 

一次性要将所有的可能都写上,如果是错误的格式,那么可能C后面的一直不会匹配,而且也

影响函数风格

如果是once

loop() ->

  A ->done;

  B ->done;

上面A能匹配后再once

loop() ->

  C->done;

 

http://localhost:4017/web/ser

 

receiver:{http,#Port<0.2186>,{http_request,'GET',{abs_path,"/web/ser"},{1,1}}}

receiver:{http,#Port<0.2186>,

               {http_header,14,'Host',undefined,"127.0.0.1:4015"}}

receiver:{http,#Port<0.2186>,

               {http_header,24,'User-Agent',undefined,

                            "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.04 (lucid) Firefox/3.6.17"}}

receiver:{http,#Port<0.2186>,

               {http_header,8,'Accept',undefined,

                            "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}}

receiver:{http,#Port<0.2186>,

               {http_header,11,'Accept-Language',undefined,"en-us,en;q=0.5"}}

receiver:{http,#Port<0.2186>,

               {http_header,10,'Accept-Encoding',undefined,"gzip,deflate"}}

receiver:{http,#Port<0.2186>,

               {http_header,9,'Accept-Charset',undefined,

                            "ISO-8859-1,utf-8;q=0.7,*;q=0.7"}}

receiver:{http,#Port<0.2186>,{http_header,51,'Keep-Alive',undefined,"115"}}

receiver:{http,#Port<0.2186>,

               {http_header,2,'Connection',undefined,"keep-alive"}}

receiver:{http,#Port<0.2186>,http_eoh}

receiver:{tcp_closed,#Port<0.2186>}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值