rlang高性能网络库esockd的编译和使用(一)

简介: rlang高性能网络库esockd的编译和使用(一)

esockd网络库的来源是:https://github.com/emqtt/esockd,这里使用的是V4.2版本。


来自作者对该网络库的自我评价:


版本功能:

1. 异步非阻塞TCP/SSL Socket服务器框架

2. 支持Acceptor池与异步Accept

3. 支持最大连接数管理

Q: 为什么不用Ranch?

A: 如果你深入理解下Erlang的TCP服务器结构,比如inet httpd、rabbitmq、ejabberd,就知道Ranch框架不及格。比如两次controlling_proccess,SSL握手阻塞Acceptor,连接Supervisor和最大连接控制都写得如屎。

当然,eSockd也可能如屎一般,但目前是我尽了很大努力拉出来的了...


https://github.com/rebar/rebar/wiki/rebar下载已经编译好的执行文件rebar,Linux环境使用。然后放入工程路径,最终工程文件夹情况如图所示:


image.png


其中的deps,doc,ebin文件夹都是后续生成的,rel文件夹是手动创建的。完整的实施过程如下:


1、修改rebar.config如下:


{deps, [{gen_logger,".*",{git,"https://github.com/emqtt/gen_logger.git",""}}]}.

{erl_opts, [debug_info,{parse_transform,lager_transform}]}.

{sub_dirs, ["rel"]}.




2、esockd-4.2路径下执行终端命令


查看rebar的版本


[root@localhost esockd-4.2]# ./rebar -V


生成应用文档

[root@localhost esockd-4.2]# ./rebar doc


获得依赖文件

[root@localhost esockd-4.2]# ./rebar get-deps


编译

[root@localhost esockd-4.2]# ./rebar compile




3、进入rel文件夹执行


[root@localhost rel]# ../rebar create-node nodeid=esockd


会自动生成文件reltool.config,手动修改如下:


%% -*- mode: erlang -*-

%% ex: ft=erlang

{sys, [

      {lib_dirs, ["../deps"]},%%指出应用依赖库的路径,如果没有依赖库则留空{lib_dirs, []}

      {erts, [{mod_cond, derived}, {app_file, strip}]},

      {app_file, strip},

      {rel, "esockd", "1",

       [

        kernel,

        stdlib,

        sasl,

        goldrush,%%指出需要自动启动的应用

        lager,

        gen_logger,

        esockd

       ]},

      {rel, "start_clean", "",

       [

        kernel,

        stdlib

       ]},

      {boot_rel, "esockd"},

      {profile, embedded},

      {incl_cond, derived},

      {excl_archive_filters, [".*"]}, %% Do not archive built libs

      {excl_sys_filters, ["^bin/(?!start_clean.boot)",

                          "^erts.*/bin/(dialyzer|typer)",

                          "^erts.*/(doc|info|include|lib|man|src)"]},

      {excl_app_filters, ["\.gitignore"]},


      {app, kernel, [{incl_cond, include}]}, %%这段有人建议要有,要求把每个依赖的工程标明。但是我实测没有也行,一样发布成功。

      {app, stdlib, [{incl_cond, include}]},

      {app, sasl, [{incl_cond, include}]},

      {app, goldrush, [{incl_cond, include}]},

      {app, lager, [{incl_cond, include}]},

      {app, gen_logger, [{incl_cond, include}]},

      {app, esockd, [{mod_cond, app}, {incl_cond, include}, {lib_dir, ".."}]} %%指出应用的路径

     ]}.



{target_dir, "esockd"}.



{overlay, [

          {mkdir, "log/sasl"},

          {copy, "files/erl", "\{\{erts_vsn\}\}/bin/erl"},

          {copy, "files/nodetool", "releases/\{\{rel_vsn\}\}/nodetool"},

          {copy, "esockd/bin/start_clean.boot",

                 "\{\{erts_vsn\}\}/bin/start_clean.boot"},

          {copy, "files/esockd", "bin/esockd"},

          {copy, "files/esockd.cmd", "bin/esockd.cmd"},

          {copy, "files/start_erl.cmd", "bin/start_erl.cmd"},

          %% Following line may be safely removed in new projects

          {copy, "files/install_upgrade.escript", "bin/install_upgrade.escript"},

          {copy, "files/sys.config", "releases/\{\{rel_vsn\}\}/sys.config"},

          {copy, "files/vm.args", "releases/\{\{rel_vsn\}\}/vm.args"}

         ]}.




4、又回到esockd-4.2路径执行,发布应用


[root@localhost esockd-4.2]# ./rebar generate




5、生成结果文件的路径:


可执行文件


/home/firecat/Prj/esockd-4.2/rel/esockd/bin

日志文件

/home/firecat/Prj/esockd-4.2/rel/esockd/log

虚拟机文件

/home/firecat/Prj/esockd-4.2/rel/esockd/releases/1/vm.args


我这里把vm.args节点修改为局域网IP地址


## Name of the node

#-name esockd@127.0.0.1

-name esockd@172.16.6.147




6、调试测试:


[root@localhost bin]# ulimit -n 100000 %%修改可建立的Linux socket上限值


[root@localhost bin]# ./esockd console%%控制台运行


Eshell V8.3  (abort with ^G)

(esockd@172.16.6.147)1> esockd:open(echo, 5000, [{sockopts, [binary, {reuseaddr, true}]}], {echo_server, start_link, []}).

echo listen on 0.0.0.0:5000 with 16 acceptors.

{ok,<0.1321.0>}


[root@localhost bin]# ./esockd start %%后台守护者进程运行




7、注:以上描述的方式仅仅是用来测试rebar工具和esockd网络库的使用。真正项目开发使用还是需要自己写app程序,把esockd作为第三方的依赖库使用。


{deps, [

{esockd, ".*", {git, "git://github.com/emqtt/esockd.git", {tag, "v4.2"}}}

]}.


详情且听下回分解:erlang高性能网络库esockd的编译和使用(二)






参考文献:


rebar进行项目部署和热更


使用rebar工具开发erlang工程项目和发布erlang工程项目

使用rebar生成erlang release 并进行热代码升级


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1月前
|
大数据 云计算
中国网络大会专题论坛 | 下一代超大规模高性能公共云网络
中国计算机学会ChinaNet上,阿里云洛神云网络将与知名学术届代表一起共话下一代超大规模高性能公共云网络的关键技术。
|
9天前
|
数据采集 监控 安全
公司网络监控软件:Zig 语言底层优化保障系统高性能运行
在数字化时代,Zig 语言凭借出色的底层控制能力和高性能特性,为公司网络监控软件的优化提供了有力支持。从数据采集、连接管理到数据分析,Zig 语言确保系统高效稳定运行,精准处理海量网络数据,保障企业信息安全与业务连续性。
32 4
|
1月前
|
机器学习/深度学习
NeurIPS 2024:标签噪声下图神经网络有了首个综合基准库,还开源
NoisyGL是首个针对标签噪声下图神经网络(GLN)的综合基准库,由浙江大学和阿里巴巴集团的研究人员开发。该基准库旨在解决现有GLN研究中因数据集选择、划分及预处理技术差异导致的缺乏统一标准问题,提供了一个公平、用户友好的平台,支持多维分析,有助于深入理解GLN方法在处理标签噪声时的表现。通过17种代表性方法在8个常用数据集上的广泛实验,NoisyGL揭示了多个关键发现,推动了GLN领域的进步。尽管如此,NoisyGL目前主要适用于同质图,对异质图的支持有限。
41 7
|
1月前
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
156 0
|
1月前
|
大数据 云计算
2024 CCF中国网络大会专题论坛丨下一代超大规模高性能公共云网络 精彩回顾
中国计算机学会ChinaNet上,阿里云洛神云网络将与知名学术届代表一起共话下一代超大规模高性能公共云网络的关键技术。
|
3月前
|
网络协议 Linux C++
超级好用的C++实用库之网络
超级好用的C++实用库之网络
70 0
|
12天前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
52 17
|
22天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。

热门文章

最新文章