非常简单得mochiweb socket wrap

<!--?xml version="1.0" encoding="UTF-8" standalone="no"?--> 写了简单得一个socket 接口,就是把mochiweb里socket部分抽取出来了。


mochiweb_socket_wrap.erl:

%%%-------------------------------------------------------------------
%%% @author zhangbo <>
%%% @copyright (C) 2011, zhangbo
%%% @doc
%%%
%%% @end
%%% Created : 28 Dec 2011 by zhangbo <>
%%%-------------------------------------------------------------------
-module(mochiweb_socket_wrap).

-compile(export_all).

-define(DEFAULTS, [{name, ?MODULE},
                   {port, 8889}]).

start() ->
    %% insert your callback loop here
    CallbackLoop = fun() ->
                           io:format("CallbackLoop fun is called~n", [])
                   end,
   
    Loop = fun (S) ->
                   ?MODULE:loop(S, CallbackLoop)
           end,
    Options1 = [{ip, "127.0.0.1"}, {loop, Loop}],
    Options = mochilists:set_defaults(?DEFAULTS, Options1),
    mochiweb_socket_server:start(Options).

stop() ->
    mochiweb_socket_server:stop(?MODULE).


loop(S, CallbackLoop) ->
    io:format("loop~n", []),
    ok = mochiweb_socket:setopts(S, [{active, once}]),
    %% inet:setopts(S, [{nodelay,true}, {active, true}]),
    try
        receive
            {tcp, S, Bin} ->
                io:format("Bin:~p~n",[Bin]),
                CallbackLoop(),
                loop(S, CallbackLoop);
            {tcp_closed,S} ->
                io:format("Socket ~p is closed~n",[S]),
                gen_tcp:close(S);
            Any ->
                io:format("Any:~p~n",[Any]),
                loop(S, CallbackLoop)
        end
    catch
        _:X ->
            io:format("Exception:~p:~p~n",[X, erlang:get_stacktrace()]),
            {X, erlang:get_stacktrace()}
    end.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值