eSockd

TCP/SSL 套接字服务器
授权协议 Apache
开发语言 ErLang
所属分类 程序开发、 高性能网络开发库
软件类型 开源软件
地区 国产
投 递 者 邵博远
操作系统 Linux
开源组织
适用人群 未知
 软件概览

eSockd 是 Erlang 开发的通用的非堵塞 TCP/SSL 套接字服务器。

主要特性:

  • 通用非堵塞 TCP/SSL 套接字服务器
  • 接受者池和异步 TCP 接受
  • UDP/DTLS 服务器
  • 最大连接管理
  • 通过对等地址允许/拒绝
  • 代理协议 V1/V2
  • Keepalive 支持
  • 速率限制
  • IPv6 支持

性能表现:

在 8 核处理器、32G内存的  ubuntu/14.04 服务器上测试结果如下:

250K concurrent connections, 50K messages/sec, 40Mbps In/Out consumed 5G memory, 20% CPU/core

一个简单的 Echo 服务器:

-module(echo_server).

-export([start_link/1]).

start_link(SockArgs) ->
   {ok, spawn_link(?MODULE, init, [SockArgs])}.

init(SockArgs = {Transport, _Sock, _SockFun}) ->
    {ok, NewSock} = esockd_connection:accept(SockArgs),
    loop(Transport, NewSock, state).

loop(Transport, Sock, State) ->
    case Transport:recv(Sock, 0) of
        {ok, Data} ->
            {ok, Name} = Transport:peername(Sock),
            io:format("~p: ~s~n", [Name, Data]),
            Transport:send(Sock, Data),
            loop(Transport, Sock, State);
        {error, Reason} ->
            io:format("tcp ~s~n", [Reason]),
            {stop, Reason}
    end.
  • 该模块主要是启动一个监督者模块esockd_acceptor_sup,该模块主要是对esockd_acceptor模块的工作进程进程监督。该模块对外提供了三个函数,分别如下: 1、start_link(ConnSup, TuneFun, UpgradeFuns, StatsFun, LimitFun):该函数被esockd_listener_sup模块的start_link函数内部调用,所以eso

  • 该模块主要是监听连接的socket连接,所以这个模块主要包含一些针对连接的管理接口,该模块主要的API如下: 1、start_link(Opts, MFA) 该函数主要是启动esockd_connection_sup监听器,函数内部调用了OTP的 gen_server:start_link(?MODULE, [Opts, MFA], [])函数,然后回调该模块的init([Opts, MFA])

  • esockd_sup模块的行为模式是 supervisor,该模式是一个监督者,该模块被 esockd_app模块内部的 start(_StartType, _StartArgs)方法内部调用,然后在esockd_sup内部会调用下面的方法: -spec(start_link() -> {ok, pid()} | ignore | {error, term()}). start_link() ->

  • -module(esockd_server). -behaviour(gen_server). -export([start_link/0]). %% stats API 导出模块接口给外部调用 -export([stats_fun/2, init_stats/2, get_stats/1, inc_stats/3, dec_stats/3, del_stats/1]). %% gen_s

  • 讲解一下,如何实现rebar热更新程序。 ------ 参考文章:http://blog.sina.com.cn/s/blog_6530ad590100wmkn.html

  • esockd_rate_limiter模块是一个工作者进程,主要是实现基于ets  esockd_rate_limiter表来限制socket的速率,其代码如下: -module(esockd_rate_limiter). -behaviour(gen_server). -export([start_link/0]). -export([create/2, create/3, consume/

  • 真正项目开发使用还是需要自己写app程序,把esockd作为第三方的依赖库使用。 一、前期准备 1、新建文件夹myerlserver 然后输入终端命令 ./rebar create-app appid=myerlserver ./rebar create template=simplesrv srvid=start_server ./rebar create template=simplesrv

  • 在上一篇基础上,继续完善app。新增心跳检测机制。 修改文件echo_server.erl如下: -module(echo_server). -include("../deps/esockd/include/esockd.hrl"). -behaviour(gen_server). %% start -export([start/0, start/1]). -export([start_li

 相关资料
  • 线程“main”java.net.ConnectException:连接超时:在java.net.dualStackplainsockeTimpl.Connect0(本机方法)在java.net.dualStackplainsockeTimpl.socketConnect(DualStackplainsockeTimpl.java:69)在java.net.abstractplainsockeTi

  • 问题内容: 如何创建SSL套接字连接? 我真的需要创建密钥库吗?该密钥库应该与我所有的客户端应用程序共享吗? 我用以下代码创建了一个服务器: 我用以下代码在android上创建了一个客户端: 但是当我尝试连接时,会引发以下错误: 问题答案: 您需要一个证书来建立ssl连接,您可以在密钥库中加载证书,也可以加载证书本身。我将显示一些有关keystore选项的示例。 您的代码需要一些参数才能运行: 您

  • 我正在开发web套接字应用程序。从前端来看,每个应用程序都有一个插座。但我不确定后端。我们将Python和nginx与Flask socketIO和socket io客户端库一起使用。此体系结构将用于通知前端发生了更改,并应更新数据。 以下是我的疑问-服务器上将创建多少套接字和线程?不同连接之间是否可以共享套接字?是否有任何工具可以分析插座是否打开?

  • 我想找个人来澄清一个我相信我有的误解。我在读Java上的套接字编程,并不真正理解事情的实际流程是什么。以下是我对以下场景的两种可能的解释。 创建套接字实例 null 服务器接受客户端之后的连接会是这样的吗?(客户端与服务器创建的套接字通信,而不是与服务器套接字通信) 或者图表会像这样吗?(客户端通过ServerSocket与服务器保持通信。服务器通过接受连接时创建的套接字进行通信。)

  • 我试图用java实现一个客户端服务器,在这里我读取客户端中的输入并在服务器中执行UperCase,然后返回客户端并打印UperCase。我使用ObjectOutputStream和ObjectInputStream进行读写,但是当我在客户机中键入一个msg时,程序会显示以下错误: Digite uma msg casa java.io.eofexception位于java.io.datainput

  • 我正试图用Netty开发以下用例: 客户端连接到上的中间服务器(端口 8900)。 客户端将具有配置的处理器请求发送到另一台计算机。 第 3 台计算机根据配置启动处理器。 处理器连接到根据配置中标识的端口(例如端口 8901)启动处理器的同一服务器。 服务器现在根据两者之间共享的匹配唯一哈希绑定客户端和处理器。 将为每个新的客户端连接创建新处理器。 客户端连接不是问题。我有一个处理这些请求的客户端

  • 这很好,但没有SSL。 我已经使用OpenSSL为服务器和客户机生成了SSL证书,结果是: 服务器的证书(PEM格式) 客户端的证书(PEM格式) 服务器的私钥(PEM格式) 客户端的私钥(PEM格式) CA文件(PEM、CER和CRT格式) null 会出什么问题?

  • 这就是第一台服务器的样子: 这是第二台服务器的样子: 第一台服务器运行良好,但当我试图运行第二台服务器时,我会得到follwing错误,这意味着到第一台服务器的连接失败。如果有人能帮助我,我会很高兴的!