使用erlang ranch tcp开发服务端

本文介绍了如何使用Erlang的Ranch库来创建一个高性能的TCP服务器。Ranch是一个TCP接受器池,适合高并发场景。通过改造Ranch自带的reverse example,设置最大连接数和接受器数量,实现了一个简易服务端。文中还提到了默认的socket选项以及如何在协议中重写这些选项,并提供了测试客户端的简单交互示例。
摘要由CSDN通过智能技术生成

Ranch:

简单来说,Ranch就是一个tcp acceptor pool,用于高并发下的tcp连接建立与管理。可以设置并发链接最大数量,在不关闭socket连接的情况下可以动态升级连接池。Cowboy就是使用的ranch。

https://github.com/ninenines/ranch


下面通过改造ranch自带的reverse example实现简易的服务端。


game_server.app.src

{application, game_server, [
	{description, "Ranch TCP reverse example."},
	{vsn, "1"},
	{modules, []},
	{registered, []}, 
	{applications, [
		kernel,
		stdlib,
		ranch
	]},
	{mod, {game_server_app, []}},
	{env, []}
]}.

game_server_app.erl

-module(game_server_app).
-behaviour(application).
-export([start/2, stop/1]).

%% start/2
start(_Type, _StartArgs) ->
    {ok, _Pid} = ranch:start_listener(tcp_reverse, 1,
        ranch_tcp, [{port, 5555},{max_connections, 10240}], game_protocol, []),
    game_server_sup:start_link().


%% stop/1
stop(State) ->
    ok.


这里注意ranch:start_listener(Ref, NbAcceptors, Transport, TransOpts, Protocol, ProtoOpts) -> {ok, pid()} | {error, badarg}.

最大连接数max_connections就是在这里进行设定, 默认值1024. NbAcceptors, Acceptor的数量,具体数值要根据实际并发设置。

Ranch接受请求并建立连接,然后就会将具体的处理交给实现了ranch_protocol行为的game_protocol,erlang中的behaviour跟java中的接口差不多。


game_server_sup.erl

-module(game_server_sup).
-b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值