`
nuaa_liu
  • 浏览: 25920 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Erlang_Demo

阅读更多
//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.
	



0
0
分享到:
评论

相关推荐

    rabbitMQ_Demo_rabbitMQ_Demo_rabbitmq_boyyeu_DEMO_中间件_

    它由 Erlang 语言开发,因其稳定性和高可用性而受到广泛欢迎。 ### 入门篇 1. **安装与配置**:RabbitMQ 可在多种操作系统上安装,包括 Linux、Windows 和 macOS。通过下载官方发行版并运行服务,可以快速启动 ...

    erlang mochiweb-test demo

    这个 "erlang mochiweb-test demo" 压缩包很可能是为了展示如何使用 Mochiweb 在 Erlang 中构建一个简单的 Web 应用程序或测试环境。 Mochiweb 的核心组件包括以下几个部分: 1. **HTTP 服务器**:Mochiweb 提供了...

    rabbitmq_demo及安装.rar

    - **Erlang环境**:RabbitMQ是用Erlang语言编写的,因此安装前需先安装Erlang环境。 - **下载RabbitMQ**:访问官方网站或通过包管理器获取RabbitMQ服务器软件包。 - **安装与启动**:按照官方文档的步骤进行安装...

    riak_ensemble_demo:设置riak_ensemble的小代码示例

    里亚克乐团实验通过riak_ensemble_demo.app.src配置: data_root:集成状态保存到的文件的路径(将附加节点名) 节点:将尝试自动加入的节点列表仅当大多数已配置节点在线并且正在运行该应用程序时,才会形成集群。...

    JavaScript + Delphi + ErLang讲座内容(4)

    erlang + delphi demo with Web UI`可能是通过Web界面展示Erlang和Delphi的集成,这可能使用了Erlang的Web开发框架,如Yaws或Mochiweb,与Delphi后端进行交互。 - `12. erlang demo with hot update`可能展示了...

    rebar_upgrade_demo

    我们是这样使用rebar更新Erlang代码的在公司的Erlang团队中,我们采用rebar来管理依赖、构建、自动化测试、部署和升级。前面的几个话题网上已经能搜到不少介绍的文章,这里就不做赘述了。本文主要集中介绍我们采用...

    vmq_pgauth_demo:VerneMQ演示Postgres身份验证组件

    先决条件最近版本的Erlang OTP(例如17.5,建议使用与VerneMQ相同的版本),并且显然是正在运行的Postgres实例。 有关安装和配置手册,请查看。 确保事先创建正确的数据库模式,查看vernemq_db.sql文件。如何配置在...

    erlang ranch实现的游戏tcp服务器

    在"game_demo"这个压缩包中,可能包含了实现这些功能的源代码示例。通过分析和学习这些代码,我们可以深入理解如何将Ranch与Erlang结合,构建一个高效的游戏TCP服务器。开发者可以在此基础上进一步扩展功能,例如...

    hackney:Erlang中的简单HTTP客户端

    - **erlang**:Erlang是一种面向并发的、函数式编程语言,常用于构建高可用性、分布式系统,尤其适合处理大量并发连接和实时性需求。 - **HTTPErlang**:可能是指Erlang中的HTTP相关库或工具,强调了这个客户端是用...

    phoenix_demo_app:演示应用程序,用于支持博客文章

    "phoenix_demo_app" 是一个基于 Elixir 语言的示例应用程序,设计用于演示如何在实际项目中支持博客文章的功能。 Phoenix 是一个构建高性能、可扩展 web 应用程序的框架,类似于 Ruby 的 Rails。在这个示例应用中,...

    live_view_demo:Phoenix Phrenzy中条目的可叉回购(https

    注意:为了进行开发,您将需要Elixir,Erlang和Node.js。 如果使用并安装,则可以使用asdf install .tool-versions指定.tool-versions 。 部署方式 如何部署应用程序取决于您。 几个最简单的选择是: Heroku() ...

    mgee:2010年写的一个erlang游戏服务端demo

    2010年写的一个erlang游戏服务端demo 说明 代码未作美化或者修改,仅仅作为一个记录,代码质量不做任何保证 部分文件可能会涉及到开源版权问题,请自行处理[当年无知,改了开源文件的版权内容] 其他八卦见这里: 本...

    erlang 中进程

    Erlang是一种面向并发的、函数式编程语言,由..."demo"这个例子可能就是用来演示这些概念的实际应用,帮助学习者理解和掌握Erlang的并发编程。通过深入理解这些知识点,开发者能够构建出高效、健壮的Erlang应用程序。

    ddd_elixir_demo_stage1:域驱动设计交付示例的ElixirPhoenixElm实现的阶段1

    DDD运送示例的Elixir / Phoenix / Elm实现该项目是和实现,以及域驱动设计交付示例的替代UI。 此示例在Eric Evans的书。 该示例的演示首先是用... 此版本演示的想法是在波特兰的ME Erlang / Elixir Meetup上构思的,Eri

    oauth_flow_demo:Oauth认证の流れをプロセスで再现したやつ

    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)-&gt;例如:免许...

    Erlang中的socket编程简单例子

    udp_demo_client(Request) -&gt; {ok, Socket} = gen_udp:open(0, [binary]), ok = gen_udp:send(Socket, "localhost", 1234, Request), Value = receive {udp, Socket, _, _, Bin} -&gt; {ok, Bin} after 2000 -&gt; ...

    JavaScript + Delphi + ErLang(1)

    标题“JavaScript + Delphi + ErLang(1)”指的是一个关于集成JavaScript、Delphi编程语言以及Erlang技术的教程或项目。这个主题涉及到多种技术的结合,主要关注如何在Delphi环境中利用JavaScript来操纵Internet ...

    配置中心springcloudconfig实例:内含erlang,RabbitMQ和练习的demo

    供做配置中心练习使用,里面有简单的介绍,我们有配置maven私服和gitlab私库,记得修改,先启动spring-cloud-demo它是server端,spring-cloud-client和spring-cloud-demo1都是client端,命名不是那么规范,谅解,...

    ehbase:通过 Erlang Thrift 库的 Erlang HBase 驱动程序

    pooler的demo.config文件中有一个默认配置,您还会在demo.config文件中找到有关Thrift server的名称、主机、ip 和套接字参数的demo.config 。 当然,您可以将这些配置信息移动到您的sys.config文件中,这是您的权利...

    Actor Simple Demo_labview_

    Actor框架是基于Actor模型的,该模型最初由Erlang编程语言引入,其核心思想是将计算任务分解为独立的实体——Actor,每个Actor都有自己的状态,并通过消息传递进行通信。在LabVIEW中,Actor框架简化了并发编程,...

Global site tag (gtag.js) - Google Analytics