(2)小项目----建立erlang服务端

原本打算在window下在quick里面嵌入protobuf,发现错误很多。研究一天都没搞好。只能休息下搞下erlang服务端,先将服务端搞好再回头嵌入protobuf到quick。

在window下不能用rebar,只能自己管理。erlang 是自己弱项。做个简单的服务端基于OTP框架,是一个标准的实现,以后再慢慢扩张吧。

(1).建立好目录doc,ebin,include,priv,src,testClient

(2).在ebin目录下加入元数据server.app,用来启动application

(3).在src下建立bz_server_sup.erl,bz_server_app.erl,bz_server.erl 三个文件。

bz_server_app.erl 用来打包程序,启动,关闭。只提供start/2,stop/1两个函数

start(_StartType,_StartArgs) ->

{ok,LSock} = gen_tcp:listen(?DEFAULT_PORT,?TCP_OPTIONS),

case bz_server_sup:start_link(LSock) of

{ok,Pid} ->

bz_server_sup:start_child(),

{ok,Pid};

Other ->

io:format("bz_server_app Listen error : ~p !",[Other]),

{error,Other}

end.

stop(_State) ->

ok.

bz_server_sup.erl 监听者顶级监听,规定了子监听的启动

start_link(LSock) ->

supervisor:start_link({"127.0.0.1",?SERVER},?MODULE,[LSock]).

start_child() ->

supervisor:start_child(?SERVER,[]).

%%Supervisor callback

init([LSock]) ->

Server = {bz_server, {bz_server, start_link, [LSock]},

temporary, brutal_kill, worker, [bz_server]},

Children = [Server],

RestartStrategy = {simple_one_for_one, 0, 1},

{ok, {RestartStrategy, Children}}.

bz_server.erl.    gen_server ,负责等待连接以后的多数实现就在这里实现。以后打算就在这里实现重客户端发送过来的消息在分发下去。

%%-------------private---------------------

accept(ListenSocket) ->

case gen_tcp:accept(ListenSocket) of

{ok,Socket} ->

io:format("<<<<<<<<<<start connect>>>>>>>>> \n"),

io:format("accept client socket : ~p \n ",[Socket]),

gen_tcp:controlling_process(Socket, self()),

bz_server_sup:start_child();

{error,Reason} ->

io:format("accept error reason : ~p \n",[Reason]),

accept(ListenSocket);

_Res ->

io:format("accept unexpected result : ~p \n",[_Res]),

accept(ListenSocket)

end.

handle_info({tcp,Socket,RawData},State) ->  %%数据收取分发

io:format("Socket :~p , RawData : ~p \n",[Socket,RawData]),

%%gen_tcp:send(Socket, "erlang server bin"),

{noreply,RawData};

时间: 2024-09-29 09:20:31

(2)小项目----建立erlang服务端的相关文章

Spring Boot构建的Web项目如何在服务端校验表单输入

本文首发于个人网站:Spring Boot构建的Web项目如何在服务端校验表单输入 这个例子用于演示在Spring Boot应用中如何验证Web 应用的输入,我们将会建立一个简单的Spring MVC应用,来读取用户输入并使用validation注解来检查,并且当用户输入错误时,应用需要再屏幕上显示错误信息提示用户重新输入. 首先构建Maven项目,该项目的pom文件内容如下: <?xml version="1.0" encoding="UTF-8"?>

某页游erlang服务端广播算法效率好差,应该算是一个bug了吧

偶然得到一份erlang网页服务端的代码 不得不说写的非常优雅,文档也非常不错,但我看到他的场景管理中的广播算法,不得不说写的很漂亮,但效率非常低. 每次都全局遍历全部在线玩家在某个场景的玩具ID,这样的算法,我不知道一个服能撑起多少人,优化一下,场景服务管理在他服务中的玩家,NPC,MON,效率会提升好几倍,只是代码会稍微复杂一点,没他写的优雅了!! %% 获取要广播的范围用户ID get_broadcast_id(Q, X0, Y0) -> AllUser = ets:match(?ETS_

项目实战之服务端分页的实现——SQL

服务端的分页就一个SQL语句就可以搞定,贴出代码后自己慢慢欣赏: CREATE Procedure AppGetEmpList @EID int, @LGID int, @pagesize int, @pageindex int As Begin select count(*) count from appemployee Select a.ID,a.EID,Case When @LGID=2052 Then Name Else eName End Name,DepTitle,JobTitle

一个C#的tcp通讯示例小程序(含服务端与客户端)

c#中经常要用到socket通讯,本示例演示了一个服务端程序与客户端程序进行通讯. 服务端封装了Socket类,先创建Socket对象,然后使用Bind()绑定端口.然后开启线程,等待客户端的连接请求.当有客户端发来连接请求后,接受请求并再开一个子 线程与客户端进行通讯. 客户端也同样使用Socket类与服务端进行通讯.详细过程参见示例程序(本程序只是一个简单的示例,不完善的地方请见谅).     2020-02 Demo下载 原文地址:https://www.cnblogs.com/sky20

搭建C#wcf服务端项目

此项目主要是为其他的web项目做一个服务端,使用wcf实现通信: 1.建一个wcf的宿主winform项目 2.创建一个wcf项目: 3.配置App.config 把wcf项目的App.config的下图配置节点剪切到宿主winform项目的App.config里 配置宿主winform项目的App.config 3.编辑wcf代码 1)定义接口和实现接口 2)编写接口和实体类代码 4.编写宿主winform 的启动wcf服务代码 1)在宿主的winform项目中引用wcf项目的dll 2)编写

C# Socket服务端与客户端通信(包含大文件的断点传输)

步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收信息   (3)发送数据(这里分发送字符串.文件(包含大文件).震动) 二.客户端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收信息   (3)发送数据(这里分发送

服务端测试之接口测试初探

提起服务端测试,第一反应想到的可能就是http协议.socket连接.post/get发送请求等等.回想起小编当时初次接触服务端测试,真可谓一脸懵逼,不知道要干什么也不知道从哪儿开始做.服务端测试往往呈现给大家的是一个很大很宽泛的任务,我们知道要做服务端测试但却不知道怎么做,流程是啥,用什么工具去做,要达到什么样的效果.今天小编就结合最近自己做的一些服务端测试的任务,和大家聊聊服务端测试中的一个常见方法--接口测试. 一.什么是接口测试 先来看看接口测试的定义: 接口测试是测试系统组件间接口的一

socket 客户端和服务端通信

客户端要连接服务器:首先要知道服务器的IP地址.而服务器里有很多的应用程序,每一个应用程序对应一个端口号 所以客户端想要与服务器中的某个应用程序进行通信就必须要知道那个应用程序的所在服务器的IP地址,及应用程序所对应的端口号 TCP协议:安全稳定,一般不会发生数据丢失,但是效率低.利用TCP发生数据一般经过3次握手(所有效率低,自己百度三次握手) UDP协议:快速,效率高,但是不稳定,容易发生数据丢失(没有经过三次握手,不管服务器有空没空,信息全往服务器发,所有效率搞,但服务器忙的时候就没办法处

.net使用FluentValidation进行服务端验证。

      背景 最近使用asp.mvc 做一个在线口语系统项目,在服务端验证问题遇到了一些小问题. 自己根据数据库表user定义一个数据库表实体对象UserDbEntity 1 [Table("User")] 2 public class UserDbEntity : DbEntityModelBase 3 { 4 [Description("用户名")] 5 [Required(ErrorMessage="*")] 6 public stri