1.ejabberd监听多个端口

每个网络连接进来,ejabberd都会使用一个进程来负责这个连接的数据处理。原理跟Joe Armstrong的《Erlang程序设计》中的并行服务器一样,就在P196,大家可以看看。

相比于Joe的例子,ejabberd的代码更具有扩展性。在ejabberd_listener.erl文件中,start/3函数会根据要调用的模块的socket_type来启动相关的必备资源。在这个文件里面,假设是tcp连接,调用过程是,start/3 -> start_dependent/3 -> init/3 -> init_tcp/6 -> accept/3 ,最后可能会调用ejabberd_frontend_socket或者ejabberd_socket里面的start/4函数。

在ejabberd_socket.erl文件中,还是会根据要调用的模块的socket_type来调用相关的函数。最后会调用模块里面的start/2函数,正常返回{ok, Pid}.一路看下来,参数中有端口,处理网络连接的模块名,连接时的选项。知道这些就可以轻松配置网络连接。

所以在处理网络连接时,要监听多个网络端口,可以考虑一下ejabberd_listener模块。具体的代码可以参考mod_proxy65_stream.erl。

2.在ejabberd的master库中,自己写的behavior模块,behavior_info函数给注释掉了,难道不需要导出behavior_info函数了吗?这个特性是在什么时候开启的?

转贴请注明来自:格通

ejabberd学习2的更多相关文章

  1. ejabberd学习1

    ejabberd是XMPP协议的一个实现,对大家的另一个意义就是,可以通过ejabberd来学习erlang. 1.从源码安装ejabberd. 可以参考ejabberd 简明配置.这个博文包括了安装 ...

  2. ejabberd,erlang,简单看了一下,总结一下,很肤浅

    本来也没打算深入学习erlang,就是看一下他们的大概思路erlang每个自定义函数都能注册成进程,每个节点通过erl -name 'name@ip'.进去后,可以直接做远程调用,节点之间就靠一个连接 ...

  3. ejabberd之开题篇

    ejabberd是基于Jabber/XMPP协议的即时通讯服务器.采用Erlang/OTP开发.它的特点是,跨平台,容错,集群和模块化.     因为自己本身是基于erlang工作,而且听到有不少的公 ...

  4. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  5. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  6. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  7. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

随机推荐

  1. Vagrant 总结

    引言   本文将讨论Vagrant基础应用,高级应用,基于Vagrant 的虚拟机优化,Vagrant的优势及区别等四部分   参考资料: [阿里云教程中心]Docker学习总结之Docker与Vag ...

  2. PHP在foreach中对$value赋值

    foreach ($data as $key => $value) { $data[$key]['name'] = '测试在value中赋值';}

  3. day 29 socketserver ftp功能的简单讲解

    1.上传下载的简单示例 server: import socket import struct import json   server =socket.socket() server.bind((' ...

  4. Oracle之基础操作

    sqlplus常用命令: 进入sqlplus模式:sqlplus /nolog 管理员登录: conn / as sysdba 登录本机的数据库 conn sys/123456 as sysdba 普 ...

  5. Waltz of love

    Waltz of love Love me tenderly Love me softly Close your eyes,fling to the dangcing hall Follow your ...

  6. ruby基础知识之 class&module

    以下分别介绍了class方法和module方法,还有最简单的def方法. 其中module和class的区别下面会说,这里首先声明,def定义的方法,需要定义对象后才能调用,而class和module ...

  7. 我和Python的Py交易》》》》》》 命名空间的小弟作用域

    命名空间的小弟作用域 在这要明确一个观点,在Python中万物皆对象,而变量指向的就是对象. 变量可以是 类名,函数名,储存数据的变量…… 对象可以是  类 ,被封装的一段代码(函数),数据…… 命名 ...

  8. Eclipse安装Java Class反编译插件

    第一步:没有安装之前 第二步:从Eclipse Marketplace里,安装反编译插件jadclipse. 第三步:安装反编译插件之后,多了一个查看器,把"类反编译查看器"设置为 ...

  9. autocomplete.jquery 点击或进入默认显示所有结果

    注意使用的是autocomplete.jquery,官网地址是:https://github.com/devbridge/jQuery-Autocomplete.而不是JqueryUI的autocom ...

  10. 手机蓝牙APP扫描设备的时候异常断开(未完成)

    1.手机蓝牙APP打开立马就出现异常,测试在公司有这个问题,在宿舍没这个问题,怀疑是公司设备太多,导致扫描空间不够,或者扫描到奇怪的设备.数组越界之类,明天用log看一下 2. 看样子出了一个erro ...