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
相关文章
|
10天前
|
大数据 云计算
中国网络大会专题论坛 | 下一代超大规模高性能公共云网络
中国计算机学会ChinaNet上,阿里云洛神云网络将与知名学术届代表一起共话下一代超大规模高性能公共云网络的关键技术。
|
2月前
|
编解码 分布式计算 网络协议
Netty高性能网络框架(一)
Netty高性能网络框架(一)
|
2月前
|
JavaScript 前端开发 API
网络请求库 – axios库
网络请求库 – axios库
191 60
|
2月前
|
数据采集 JSON API
🎓Python网络请求新手指南:requests库带你轻松玩转HTTP协议
本文介绍Python网络编程中不可或缺的HTTP协议基础,并以requests库为例,详细讲解如何执行GET与POST请求、处理响应及自定义请求头等操作。通过简洁易懂的代码示例,帮助初学者快速掌握网络爬虫与API开发所需的关键技能。无论是安装配置还是会话管理,requests库均提供了强大而直观的接口,助力读者轻松应对各类网络编程任务。
114 3
|
2月前
|
机器学习/深度学习 JSON API
HTTP协议实战演练场:Python requests库助你成为网络数据抓取大师
在数据驱动的时代,网络数据抓取对于数据分析、机器学习等至关重要。HTTP协议作为互联网通信的基石,其重要性不言而喻。Python的`requests`库凭借简洁的API和强大的功能,成为网络数据抓取的利器。本文将通过实战演练展示如何使用`requests`库进行数据抓取,包括发送GET/POST请求、处理JSON响应及添加自定义请求头等。首先,请确保已安装`requests`库,可通过`pip install requests`进行安装。接下来,我们将逐一介绍如何利用`requests`库探索网络世界,助你成为数据抓取大师。在实践过程中,务必遵守相关法律法规和网站使用条款,做到技术与道德并重。
48 2
|
2月前
|
网络协议 Linux C++
超级好用的C++实用库之网络
超级好用的C++实用库之网络
44 0
|
7天前
|
存储 安全 算法
网络安全与信息安全:漏洞、加密技术及安全意识的重要性
如今的网络环境中,网络安全威胁日益严峻,面对此类问题,除了提升相关硬件的安全性、树立法律法规及行业准则,增强网民的网络安全意识的重要性也逐渐凸显。本文梳理了2000年以来有关网络安全意识的研究,综述范围为中国知网中篇名为“网络安全意识”的期刊、硕博论文、会议论文、报纸。网络安全意识的内涵是在“网络安全”“网络安全风险”等相关概念的发展中逐渐明确并丰富起来的,但到目前为止并未出现清晰的概念界定。此领域内的实证研究主要针对网络安全意识现状与问题,其研究对象主要是青少年。网络安全意识教育方面,很多学者总结了国外的成熟经验,但在具体运用上仍缺乏考虑我国的实际状况。 内容目录: 1 网络安全意识的相关
|
2天前
|
监控 安全 网络安全
企业网络安全:构建高效的信息安全管理体系
企业网络安全:构建高效的信息安全管理体系
18 5
|
3天前
|
存储 安全 网络安全
云计算与网络安全:探索云服务中的信息安全挑战与解决方案
【10月更文挑战第33天】在数字化时代的浪潮中,云计算以其灵活性、可扩展性和成本效益成为企业数字化转型的核心动力。然而,随之而来的网络安全问题也日益突出,成为制约云计算发展的关键因素。本文将深入探讨云计算环境中的网络安全挑战,分析云服务的脆弱性,并提出相应的信息安全策略和最佳实践。通过案例分析和代码示例,我们将展示如何在云计算架构中实现数据保护、访问控制和威胁检测,以确保企业在享受云计算带来的便利的同时,也能够维护其信息系统的安全和完整。
|
1天前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的深度剖析
【10月更文挑战第34天】本文将深入探讨云计算与网络安全的关系,包括云服务、网络安全、信息安全等技术领域。我们将通过实例和代码示例,解析云计算如何改变网络安全的格局,以及如何在云计算环境下保护信息安全。我们将从云计算的基本概念开始,然后深入到网络安全和信息安全的主题,最后通过代码示例来展示如何在云计算环境下实现网络安全和信息安全。
下一篇
无影云桌面