eSockd 是 Erlang 开发的通用的非堵塞 TCP/SSL 套接字服务器。
主要特性:
性能表现:
在 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错误,这意味着到第一台服务器的连接失败。如果有人能帮助我,我会很高兴的!