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版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
460 2
基于Reactor模型的高性能网络库之Tcpconnection组件
TcpConnection 由 subLoop 管理 connfd,负责处理具体连接。它封装了连接套接字,通过 Channel 监听可读、可写、关闭、错误等
381 1
|
监控 前端开发 安全
Netty 高性能网络编程框架技术详解与实践指南
本文档全面介绍 Netty 高性能网络编程框架的核心概念、架构设计和实践应用。作为 Java 领域最优秀的 NIO 框架之一,Netty 提供了异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本文将深入探讨其 Reactor 模型、ChannelPipeline、编解码器、内存管理等核心机制,帮助开发者构建高性能的网络应用系统。
861 0
|
机器学习/深度学习 算法 数据库
基于GoogleNet深度学习网络和GEI步态能量提取的步态识别算法matlab仿真,数据库采用CASIA库
本项目基于GoogleNet深度学习网络与GEI步态能量图提取技术,实现高精度步态识别。采用CASI库训练模型,结合Inception模块多尺度特征提取与GEI图像能量整合,提升识别稳定性与准确率,适用于智能安防、身份验证等领域。
|
SQL 监控 安全
网络安全与信息安全:漏洞、加密与安全意识
随着互联网的迅猛发展,网络安全和信息安全问题日益受到关注。本文深入探讨了网络安全漏洞、加密技术以及提高个人和组织的安全意识的重要性。通过分析常见的网络攻击手段如缓冲区溢出、SQL注入等,揭示了计算机系统中存在的缺陷及其潜在威胁。同时,详细介绍了对称加密和非对称加密算法的原理及应用场景,强调了数字签名和数字证书在验证信息完整性中的关键作用。此外,还讨论了培养良好上网习惯、定期备份数据等提升安全意识的方法,旨在帮助读者更好地理解和应对复杂的网络安全挑战。
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
666 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
489 10
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
461 10
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。

热门文章

最新文章