//socket基本应用
//erlang程序基本写法
-module(vpl).
-export[(run/2)].
-define(IP,"127.0.0.1").
-define(PORT,1777).
run(ThreadCount,MsgCount)->
CurrentThreadNo = -1,
CurrentMsgNo = -1,
swpan_thread(CurrentThreadNo,CurrentMsgNo,ThreadCount,MsgCount).
swpan_thread(CurrentThreadNo,CurrentMsgNo,ThreadCount,MsgCount)->
NewThreadNo = CurrentThreadNo + 1,
if
NewThreadNo == ThreadCount ->
ok;
NewThreadNo < ThreadCount ->
RetryCount = 3,
spawn(fun() ->
connect_vsp(NewThreadNo,MsgCount,RetryCount)
end),
swpan_thread(NewThreadNo,CurrentMsgNo,ThreadCount,MsgCount)
end.
connect_vsp(NewThreadNo,MsgCount,RetryCount)->
case gen_tcp:connect(?IP,?PORT,[binary]) of
{ok,Socket} ->
io:fwrite("connect success! ThreadNo=~w~n",[NewThreadNo]),
TransId = 0,
send_msg(Socket,MsgCount,TransId,NewThreadNo);
{error,Reason} ->
io:fwrite("connect failed Error=~s,ThreadNo=~w~n !",[Reason,NewThreadNo]),
NewRetryCount = RetryCount - 1,
if
NewRetryCount > 0 ->
io:fwrite("reconnect ThreadNo=~w,RetryTime=~w~n",[NewThreadNo,NewRetryCount]),
connect_vsp(NewThreadNo,MsgCount,NewRetryCount);
NewRetryCount == 0 ->
io:fwrite("reconnect ThreadNo=~w Reach Retry Max! ~n",[NewThreadNo])
end
end.
send_msg(Socket,MsgCount,TransId,NewThreadNo)->
MsgContentBin = <<"TestContent">>,
Len = string:len(binary_to_list(MsgContentBin)),
%%packet head
MsgType = 16#222,
Version=1,
ReserveInt=0,
SendMsg = binary_to_list(<<Len:32,MsgType:16,Version:16,ReserveInt:32,>>) ++ binary_to_list(MsgContentBin),
if
MsgCount == 0 ->
ok = gen_tcp:close(Socket),
io:fwrite("test over ThreadNo=~w~n",[NewThreadNo]);
MsgCount > 0 ->
NewMsgCount = MsgCount - 1,
NewTransId = TransId + 1,
case gen_tcp:send(Socket,SendMsg) of
ok ->
receive_data(Socket,NewMsgCount,NewTransId,NewThreadNo);
{error,Reason}->
io:fwrite("send failed ~s~n !",[Reason])
end
end.
receive_data(Socket,NewMsgCount,NewTransId,NewThreadNo) ->
receive
{tcp,Socket,Bin} ->
<<RecvLen:32,MsgType:16,_/binary>> = Bin,
io:fwrite("~w ~.16B ~n",[RecvLen,RecvMsg]),
send_msg(Socket,NewMsgCount,NewTransId,NewThreadNo);
{tcp_closed,Socket}->
io:fwrite("close~n")
end.
分享到:
相关推荐
erlang mochiweb-test demo .zip
里亚克乐团实验通过riak_ensemble_demo.app.src配置: data_root:集成状态保存到的文件的路径(将附加节点名) 节点:将尝试自动加入的节点列表仅当大多数已配置节点在线并且正在运行该应用程序时,才会形成集群。...
我们是这样使用rebar更新Erlang代码的在公司的Erlang团队中,我们采用rebar来管理依赖、构建、自动化测试、部署和升级。前面的几个话题网上已经能搜到不少介绍的文章,这里就不做赘述了。本文主要集中介绍我们采用...
先决条件最近版本的Erlang OTP(例如17.5,建议使用与VerneMQ相同的版本),并且显然是正在运行的Postgres实例。 有关安装和配置手册,请查看。 确保事先创建正确的数据库模式,查看vernemq_db.sql文件。如何配置在...
erlang nif test demo
注意:为了进行开发,您将需要Elixir,Erlang和Node.js。 如果使用并安装,则可以使用asdf install .tool-versions指定.tool-versions 。 部署方式 如何部署应用程序取决于您。 几个最简单的选择是: Heroku() ...
erlang单服游戏服务器,mnesia数据库,小型的游戏demo,编译可以启动,可以用来学习erlang游戏服务器相关的东西
2010年写的一个erlang游戏服务端demo 说明 代码未作美化或者修改,仅仅作为一个记录,代码质量不做任何保证 部分文件可能会涉及到开源版权问题,请自行处理[当年无知,改了开源文件的版权内容] 其他八卦见这里: 本...
DDD运送示例的Elixir / Phoenix / Elm实现该项目是和实现,以及域驱动设计交付示例的替代UI。 此示例在Eric Evans的书。 该示例的演示首先是用... 此版本演示的想法是在波特兰的ME Erlang / Elixir Meetup上构思的,Eri
Erlang/OTP 23 [erts-11.0.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] [dtrace] Elixir 1.10.3 (compiled with Erlang/OTP 22) 调查メモ 认证について SSO(SingleSignOn)->例如:免许...
hackney:Erlang中的简单HTTP客户端
供做配置中心练习使用,里面有简单的介绍,我们有配置maven私服和gitlab私库,记得修改,先启动spring-cloud-demo它是server端,spring-cloud-client和spring-cloud-demo1都是client端,命名不是那么规范,谅解,...
pooler的demo.config文件中有一个默认配置,您还会在demo.config文件中找到有关Thrift server的名称、主机、ip 和套接字参数的demo.config 。 当然,您可以将这些配置信息移动到您的sys.config文件中,这是您的权利...
CT_REFRESH_CHROME_START=true rebar -C demo_rebar.config ct 安装/配置: 添加到您的rebar.config中: {ct_extra_params, "-event_handler ct_refresh_events"}. {deps, [ {ct_refresh, ".*", {git, ...
erlang-html5-chatroom 一个聊天室demo,用来测试html5 websocket 和 erlang 的通信 服务端 编译: cd server erlc *.erl 运行: erl 1>chatroom:start(9000).
本压缩包包含RabbitMQ与Erlang的安装包,并附上RabbitMQ的使用demo,采用Java Maven
rebar3搭建erlang otp 编译运行demo erl +P 1024000 -pa ./_build/default/lib/vvdemo/ebin -name gs_framework@192.168.77.41 -setcookie bhgame -kernel dist_auto_connect never -s main start
心电图 ECG是E rlang函数C的所有图G enerator,其自动绘制函数调用和处理程序派生。 ECG利用Erlang强大的跟踪机制和可视化工具graphviz ,确保已安装graphviz ,并且由于此处使用Python...假设我们要在demo目录中绘制模
第一部分:JavaScript + Delphi,主体是讲在Delphi上如何方便的控制IE,给出了全部示例,以及相关问题的解决方法。 重传了800回了!为啥不中呢!!!
EMQ是基于Erlang/OTP语言平台开发,百万级分布式开源物联网MQTT消息服务器