gpt4 book ai didi

sockets - 正在使用 Erlang 的 gen_tcp 一种可扩展的方式来构建高流量套接字服务器

转载 作者:行者123 更新时间:2023-12-04 10:09:22 32 4
gpt4 key购买 nike

我正在尝试学习 Erlang 来做一些简单但可扩展的网络编程。我基本上想编写一个程序来完成互联网 Backbone 上的服务器所做的事情——但规模较小。我想尝试建立一个带有 Web 可访问服务器的 Intranet,这些服务器将充当 Intranet [sic] 的网关,并将数据路由到连接的客户端和/或其他网关。

高流量来自这样一个事实,即数据不仅会从客户端流向网关再到客户端,而且可能必须绕过几个网关才能到达目的地(例如数据在互联网上的传输方式)。这意味着网关不仅要处理来自其客户端的流量,还要处理来自其他网关客户端的流量。

我认为这会导致异常高的流量,即使对于中等数量的客户端和网关也是如此。

来自 Python 以及在较小程度上其他脚本语言的背景,我习惯于挖掘自定义模块来解决我的问题。我知道 Erlang 是为高流量网络编程而设计的,但我能找到的关于这类东西的库/模块的只有 gen_tcp。

这是否意味着 Erlang 已经针对这种事情进行了如此优化,以至于您可以使用其最基本的模块启动它并期望它能够很好地扩展?

最佳答案

您可以期待 gen_tcp即使在大负载条件下也能表现得非常好。如果您只是要传递数据而不是对其进行太多处理,那么我的猜测是您将能够很好地扩展 - 实际上您将只是传递指针。

所有用 Erlang 编写的已知可扩展解决方案都使用 gen_tcp :

  • 牛仔、Mochiweb、Yaws、...
  • 里亚克
  • 洪流
  • 兔MQ

  • 等等。使用它时,有一个提示值得一提:确保以 erl +K true 运行 erl所以你可以访问内核轮询。也就是说, epoll()在 Linux 上, kqueue()/kevent()在 BSD 和 /dev/poll 上在 Solaris 上。另请注意,您可以向 TCP 端口发出命令以设置它们的选项 w.r.t。缓冲区大小等。最后,对于某些类型的数据包,您可以让 C 层为您解析数据包,请参阅 erl -man inetsetopts/2称呼。一个例子是 {packet, 4}这很受欢迎。

    一般来说,Erlang 有一个相当快的 I/O 子层。您可以期望它执行得非常快,即使对于大型复杂交互也是如此。

    关于sockets - 正在使用 Erlang 的 gen_tcp 一种可扩展的方式来构建高流量套接字服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12645845/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com