//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 语言开发,因其稳定性和高可用性而受到广泛欢迎。 ### 入门篇 1. **安装与配置**:RabbitMQ 可在多种操作系统上安装,包括 Linux、Windows 和 macOS。通过下载官方发行版并运行服务,可以快速启动 ...
这个 "erlang mochiweb-test demo" 压缩包很可能是为了展示如何使用 Mochiweb 在 Erlang 中构建一个简单的 Web 应用程序或测试环境。 Mochiweb 的核心组件包括以下几个部分: 1. **HTTP 服务器**:Mochiweb 提供了...
- **Erlang环境**:RabbitMQ是用Erlang语言编写的,因此安装前需先安装Erlang环境。 - **下载RabbitMQ**:访问官方网站或通过包管理器获取RabbitMQ服务器软件包。 - **安装与启动**:按照官方文档的步骤进行安装...
里亚克乐团实验通过riak_ensemble_demo.app.src配置: data_root:集成状态保存到的文件的路径(将附加节点名) 节点:将尝试自动加入的节点列表仅当大多数已配置节点在线并且正在运行该应用程序时,才会形成集群。...
erlang + delphi demo with Web UI`可能是通过Web界面展示Erlang和Delphi的集成,这可能使用了Erlang的Web开发框架,如Yaws或Mochiweb,与Delphi后端进行交互。 - `12. erlang demo with hot update`可能展示了...
我们是这样使用rebar更新Erlang代码的在公司的Erlang团队中,我们采用rebar来管理依赖、构建、自动化测试、部署和升级。前面的几个话题网上已经能搜到不少介绍的文章,这里就不做赘述了。本文主要集中介绍我们采用...
先决条件最近版本的Erlang OTP(例如17.5,建议使用与VerneMQ相同的版本),并且显然是正在运行的Postgres实例。 有关安装和配置手册,请查看。 确保事先创建正确的数据库模式,查看vernemq_db.sql文件。如何配置在...
在"game_demo"这个压缩包中,可能包含了实现这些功能的源代码示例。通过分析和学习这些代码,我们可以深入理解如何将Ranch与Erlang结合,构建一个高效的游戏TCP服务器。开发者可以在此基础上进一步扩展功能,例如...
- **erlang**:Erlang是一种面向并发的、函数式编程语言,常用于构建高可用性、分布式系统,尤其适合处理大量并发连接和实时性需求。 - **HTTPErlang**:可能是指Erlang中的HTTP相关库或工具,强调了这个客户端是用...
"phoenix_demo_app" 是一个基于 Elixir 语言的示例应用程序,设计用于演示如何在实际项目中支持博客文章的功能。 Phoenix 是一个构建高性能、可扩展 web 应用程序的框架,类似于 Ruby 的 Rails。在这个示例应用中,...
注意:为了进行开发,您将需要Elixir,Erlang和Node.js。 如果使用并安装,则可以使用asdf install .tool-versions指定.tool-versions 。 部署方式 如何部署应用程序取决于您。 几个最简单的选择是: Heroku() ...
2010年写的一个erlang游戏服务端demo 说明 代码未作美化或者修改,仅仅作为一个记录,代码质量不做任何保证 部分文件可能会涉及到开源版权问题,请自行处理[当年无知,改了开源文件的版权内容] 其他八卦见这里: 本...
Erlang是一种面向并发的、函数式编程语言,由..."demo"这个例子可能就是用来演示这些概念的实际应用,帮助学习者理解和掌握Erlang的并发编程。通过深入理解这些知识点,开发者能够构建出高效、健壮的Erlang应用程序。
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)->例如:免许...
udp_demo_client(Request) -> {ok, Socket} = gen_udp:open(0, [binary]), ok = gen_udp:send(Socket, "localhost", 1234, Request), Value = receive {udp, Socket, _, _, Bin} -> {ok, Bin} after 2000 -> ...
标题“JavaScript + Delphi + ErLang(1)”指的是一个关于集成JavaScript、Delphi编程语言以及Erlang技术的教程或项目。这个主题涉及到多种技术的结合,主要关注如何在Delphi环境中利用JavaScript来操纵Internet ...
供做配置中心练习使用,里面有简单的介绍,我们有配置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文件中,这是您的权利...
Actor框架是基于Actor模型的,该模型最初由Erlang编程语言引入,其核心思想是将计算任务分解为独立的实体——Actor,每个Actor都有自己的状态,并通过消息传递进行通信。在LabVIEW中,Actor框架简化了并发编程,...