`
cwqcwk1
  • 浏览: 86920 次
文章分类
社区版块
存档分类
最新评论

erlang如何有效监听大量并发连接

 
阅读更多

看了erlang的一些开源网络框架RabbitMQ、Ranch,他们都使用多个进程同时accept一个socket。这种方式在使得socket端口监听的工作分担了更多的调度机会,但是,在erlang中,socket接受一个新连接后,如果想让另一个进程处理消息,就要显式的调用gen_tcp:controlling_process(Socket, Pid)。

所以问题来了,erlang多个进程同时监听一个socket安全吗?

这种方式在早期的erlang是不安全的,但R11B03 版本之后,erlang做了改进,允许多个进程同时监听同一个socket。

erlangR11B03更新日志

OTP-6416 gen_tcp now allows for several processes to issue accept calls to the same listen-socket simultaniously. The different accepting processes will get connected sockets on a first-come-first-served basis.

当多个进程同时accept一个socket,erlang 内部将使用队列保存acceptor信息,以先来先服务的原则将新的连接关联到acceptor,再给acceptor投递消息 {inet_async, L, Ref, Result}。

具体看\erts\emulator\drivers\common\inet_drv.c 的 tcp_inet_ctl 函数,erlang对socket的处理都集中在inet_drv.c

erlang配合{backlog, N},监听新连接效果更佳

backlog是erlang用来设置socket等待连接队列。N为队列的长度,默认值5,显然太小了

参考:

http://blog.csdn.net/mycwq/article/details/27108911

分享到:
评论

相关推荐

    erlang并发编程

    9. 连接池(Connection Pools):在并发编程中,连接池是管理数据库或其他资源连接的有效策略,它可以提高性能并减少资源消耗。 10. GenServer行为:GenServer是OTP行为之一,它提供了一种标准的方式来实现状态管理...

    Erlang OTP并发编程实战 附书源码

    7. **Erlang VM(BEAM)**:Erlang运行在自己的虚拟机BEAM上,它优化了并发执行和内存管理,使Erlang系统能够处理大量并发连接。 8. **Pattern Matching**:Erlang的模式匹配是其语法的一大特色,它使得在函数调用...

    erlang 连接学习例子

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。在这个“erlang 连接学习例子”中,我们有两个核心文件:`server.erl` 和 `client.erl`,它们...

    erlang ranch实现的游戏tcp服务器

    1. **Erlang语言基础**:Erlang是一种函数式编程语言,以其并发和分布式特性著名,特别适合处理大规模的并发连接。了解Erlang的基本语法、模式匹配、进程(process)模型以及错误处理是必要的。 2. **Ranch库**:...

    erlang server

    1. **并发性**:Erlang的设计非常适合处理大量并发连接。它通过轻量级进程(processes)来实现并发,这些进程之间通过消息传递进行通信,能有效隔离错误并提供高并发能力。 2. **热更新**:Erlang支持运行时代码热...

    erlang-java聊天

    Erlang服务器可以监听客户端连接,接收消息,并将它们分发到正确的接收者。 - **客户端**:可能分为Erlang和Java两个版本。Erlang客户端可以直接与Erlang服务器通信,而Java客户端则通过Jinterface与Erlang服务器...

    erlang tcp_server

    了解并掌握这些知识点后,你就可以着手编写一个能够处理TCP连接、响应客户端请求并能适应高并发场景的Erlang TCP服务器了。在设计和实现过程中,需要注意代码的可读性、可维护性和性能优化。通过实践和不断迭代,...

    erlang 深度分析

    - **高并发**: 利用轻量级进程模型处理大量并发连接。 - **容错性**: 设计时充分考虑了系统的容错性。 - **应用场景**: 实时通信、在线游戏等领域。 #### 28. Erlang社区活动 - **CNErlounge III**: 一次聚焦于...

    Erlang深度分析

    调试是软件开发中不可或缺的环节,Erlang提供了许多强大的调试工具,例如Erlang的crash dump分析工具、snooper消息监听器等,它们帮助开发者在开发和测试阶段快速定位和解决问题。 #### 4. 并发与网络 ##### 4.1 ...

    一个我自己学习Erlang的聊天室服务器及客户端代码

    本项目提供了一个使用Erlang编写的聊天室服务器端代码以及Java编写的客户端代码,这为我们深入理解Erlang的并发特性和Java与Erlang的交互提供了实践案例。 一、Erlang聊天室服务器端 1. 并发处理:Erlang的轻量级...

    erlang 聊天室

    例如,服务器会监听特定端口,当客户端请求连接时,gen_tcp的accept函数会返回一个新的套接字用于通信。而send和recv函数则用于在连接上发送和接收消息。 接着,我们来看**gen_server**行为。gen_server是Erlang ...

    erlang简单聊天练习

    在提供的资源中,可能有一个名为`server`的模块,它实现了一个简单的聊天服务器,监听客户端的连接请求,并处理它们发送的消息。 2. **客户端(Client)**:用户交互界面,用于输入和显示聊天内容。资源中也有一个`...

    aerospike-client-erlang

    总的来说,Aerospike Client for Erlang是Erlang开发者与Aerospike数据库交互的桥梁,它通过简洁的API简化了数据库操作,并且充分利用了Erlang的并发特性,提升了系统的整体性能。在解压并安装"aerospike-client-...

    erlang r17官方api及stdlib手册

    Erlang是一种面向并发的、函数式编程语言,主要用于构建分布式、容错性强的系统。R17是Erlang的一个版本,它包含了对先前版本的改进和新特性。本手册是Erlang R17的官方API及stdlib文档,为开发者提供了详尽的函数...

    erlang学习3pdf

    本篇文档将详细介绍如何通过Erlang语言实现一个支持多个并发连接的TableServer,并探讨进程的创建、Socket操作以及消息传递等核心概念。 #### 二、知识点详述 ##### 2.1 支持多个连接的TableServer - **简单服务器...

    erlang与delphi多客户端通讯

    在处理多个客户端连接时,Erlang的并发能力可以轻松处理高并发场景。Delphi也可以通过多线程或异步IO来处理并发连接。为了提高系统的扩展性和稳定性,可能还需要设计负载均衡策略,如轮询、随机分配或根据客户端...

    Erlang 22.0 +RabbitMQ3.7.16安装程序.zip

    Erlang是一种函数式编程语言,特别设计用于构建高可用性、容错性强的并发系统,而RabbitMQ则是一个开源的消息代理和队列服务器,它是基于Erlang语言开发的,广泛应用于微服务架构中,作为消息中间件来处理和路由消息...

    erlang学习2.pdf

    通过上述分析可以看出,“erlang学习2.pdf”文档详细地介绍了Erlang语言在网络编程方面的应用,包括简单的HelloServer、TableServer的设计与实现,以及TCP Server的不同连接模式。这些内容为初学者提供了很好的实践...

Global site tag (gtag.js) - Google Analytics