Erlang TCP 套接字关闭

2024-04-09

为了学习 Erlang,我正在尝试实现一个基于gen_tcp。不幸的是,我的代码似乎触发了一些有线行为。为了演示这个问题,我附上了我的实现的最小化版本,它足以重现该问题。无论 HTTP 请求是什么,它都只是传递静态 200 OK。

当我尝试运行时出现问题ab(Apache HTTP 服务器基准测试)针对我的 Web 服务器(使用环回接口)。没有任何并发​​请求(-c)一切都运行得很好。但是,如果我使用-c 8 or -c 16,调用gen_tcp:accept/1似乎在某些套接字上失败,因为我看到了一些request: closed外壳中的线条。

让整个故事变得更奇怪的是,我在不同的操作系统上看到了不同的行为:

  • OS X+Erlang/OTP 18:ab启动后几乎立即报告“连接被对等方重置”。
  • Debian+Erlang R15B01:除了两个 HTTP 请求之外,所有 HTTP 请求似乎都已通过。但是之后,ab当我运行时,挂起几秒钟并报告“指定的超时已过期,总计 4998 个请求已完成”ab with -n 5000。同样,当我运行 15000 次测试时,会报告 14998。

This one https://stackoverflow.com/questions/32410172/erlang-raise-number-of-opened-sockets-macos-and-centos似乎不是问题。老实说,我很迷茫,因此感谢任何帮助! :) 谢谢!

server(Port) ->
    Opt = [list, {active, false}, {reuseaddr, true}],
    case gen_tcp:listen(Port, Opt) of
        {ok, Listen} ->
            handler(Listen),
            gen_tcp:close(Listen),
            ok;
        {error, Error} ->
            io:format("init: ~w~n", [Error])
    end.

handler(Listen) ->
    case gen_tcp:accept(Listen) of
        {ok, Client} ->
            request(Client),
            handler(Listen);
        {error, Error} ->
            io:format("request: ~w~n", [Error])
    end.

request(Client) ->
    Recv = gen_tcp:recv(Client, 0),
    case Recv of
        {ok, _} ->
            Response = reply(),
            gen_tcp:send(Client, Response);
        {error, Error} ->
            io:format("request: ~w~n", [Error])
    end,
    gen_tcp:close(Client).


reply() ->
    "HTTP/1.0 200 OK\r\n" ++
    "Content-Length: 7\r\n\r\n"
    "static\n".

当您增加发送的并发请求数时ab -c N它会立即打开多个到服务器的 TCP 套接字。

默认情况下,使用 gen_tcp:listen/2 打开的套接字将仅支持五个未完成的连接请求。使用 gen_tcp:listen/2 的 {backlog, N} 选项增加未完成的连接请求数。

我用 ab 在 OS X 上测试了你的代码,发现这解决了“连接由对等方重置”的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Erlang TCP 套接字关闭 的相关文章

  • 接收缓冲区的限制

    我通过以下方式与客户端建立了连接 gen tcp listen 1234 binary packet 0 reuseaddr true active false recbuf 2048 此代码执行消息处理 loop Socket gt in
  • Erlang 中的 begin...end 有何用途?

    我刚刚踩了一个begin end在 Erlang 的文档中 here http www erlang org doc reference manual expressions html id79819 但它没有给出一些例子来说明它是如何有用
  • 何时“让它崩溃”以及何时捍卫 Erlang 中的代码?

    因此 带着 让它崩溃 的口号 Erlang 代码意味着能够抵御残酷的世界事件 例如意外拔出插头 硬件故障和不稳定的网络连接 另一方面 有防御性编程 https en wikipedia org wiki Defensive programm
  • 选择用于实现分布式消息传递算法的编程语言

    基本上 我想实现以下算法并分析使用这些算法构建的系统在不同条件下的行为 八卦协议 多个paxos 一致的散列 我的兴趣在于这些算法 我基本上是在寻找一种编程语言 可以让我快速编写这些算法并深入理解这些算法 我应该选择哪种语言 Java Sc
  • 在 Red Hat 上安装 RabbitMQ - 错误的 Erlang 版本

    我正在尝试按照以下说明在 Red Hat Enterprise Linux 7 64 位工作站版本 的评估虚拟机上安装 RabbitMQhttps www rabbitmq com install rpm html https www ra
  • 当在 erlang 模块上调用“new”时,它会做什么?

    我见过 Erlang 代码中使用了 module name new 但是 module name 模块中没有引用 new 函数 新 有什么作用 它用于 参数化模块 参见here http yarivsblog com articles 20
  • `ejabberdctl start` 导致“内核 pid 终止”错误 - 我该怎么办?

    我用谷歌搜索了三个小时但没有结果 我有一个 ejabberd 安装 但不是使用 apt 安装的 它是从源代码安装的 其中没有名为 ejabberd 的程序 启动和停止 一切都是通过 ejabberdctl 进行的 它完美地运行了一个月 突然
  • Erlang 代码的持续集成服务器

    您使用什么类型的敏捷工具进行 Erlang 开发 什么持续集成 http en wikipedia org wiki Continuous integration您使用 CI 服务器来构建 Erlang 代码吗 我得到的唯一参考来自 Quo
  • Erlang中如何维护状态?

    我见过人们使用口述 命令 记录用于维护我读过的许多博客中的状态 我发现这是一个非常重要的概念 一般来说 我理解维护状态和递归的含义 但是当涉及到 Erlang 时 我对它的处理方式有点模糊 有什么帮助吗 维护状态的最简单方法是使用gen s
  • 如何在 Erlang 中将 XML 转换为元组列表?

    我正在尝试从 XML 创建键 值对元组 我想从任何嵌套的 XML 中列出一个列表 这似乎是一件很常见的事情 但我找不到任何例子 例如
  • 如何在没有任何服务器的情况下创建 P2P 网络聊天?

    有没有一种方法可以在没有任何服务器的情况下创建 P2P 网络聊天 可以 但是您必须决定见面地点 如果你的朋友把他的IP发给你 你就可以连接 那么你只需要告诉更多的人加入即可 一段时间后 你会变得越来越大 然后 如果网络上的某个链接发生故障
  • Elixir / Erlang Dialyzer:为什么行为回调的参数类型应该是子类型而不是超类型?

    我有一个行为 X 和一个参数类型的回调函数 a any 模块 Y 实现行为 X 实现模块 Y 中的回调函数具有参数类型 a any b any Dialyzer 不喜欢这样并抱怨 a b gt is not a supertype of a
  • ejabberd 和 Erlang 安装,lager_transform 未定义

    我是 Erlang 新手 我一直在尝试在 EC2 ubuntu 机器上安装 Erlang 和 ejabberd 一切都很顺利 直到我开始编译一些外部模块ejabberd 它开始抛出错误undefined parse transform la
  • Node.js 或 Erlang

    当谈到它们可以处理的并发级别时 我真的很喜欢这些工具 Erlang OTP 看起来是更稳定的解决方案 但需要更多的学习和深入研究函数式语言范例 看起来 Erlang OTP 在多核 CPU 方面做得更好 如果我错了 请纠正我 但我应该选择哪
  • 零部署 CouchDB 嵌入 Windows 应用程序?

    我可能在这里做梦 但我想知道是否有可能将最小的 CouchDB 引擎完全嵌入到 Windows 应用程序中 以便该应用程序可以运行而无需在用户计算机上安装 CouchDB Erlang 我已经提供了这种精简 捆绑的功能 请在此处查看http
  • 检查 Erlang 中的活动计时器

    有没有一种简单的方法来获取所有当前等待的计时器的列表erlang send after erlang apply after等在Erlang中 出于调试目的 您可以使用dbg 首先创建一个 ets 表来存储所有计时器引用 1 gt ets
  • Erl 无法连接到本地 EPMD。为什么?

    Erlang R14B04 erts 5 8 5 source 64 bit rq 1 async threads 0 kernel poll false Eshell V5 8 5 abort with G root ip 10 101
  • 设置 Emacs 进行 Erlang 编程

    Emacs 是 Erlang 编程的首选 IDE 有很多好的模式 distel erlware mode 默认的 erlang 模式 但是您对设置 Emacs 进行专业 Erlang 开发有何建议 按照中所述设置 erlang mode自述
  • 使用自定义 mysql 模式的模块扩展 ejabberd?

    代替ejabberd sql https github com processone ejabberd blob master sql mysql sql L95 我正在使用自定义 MySQL 架构 由于遗留原因 我将对某些活动执行一些数据
  • Erlang 应该如何处理通用数据?

    假设我正在使用 Erlang 构建游戏服务器 每个用户检查某些内容 例如找到最近的玩家 是很常见的 因此通常有一个管理器类 在上面的例子中 我们使用互斥锁 据我所知 Erlang 通常会为每个 TCP 连接 用户会话 创建新的 Erlang

随机推荐

  • 使用 xscreensaver 编写屏幕保护程序的提示和技巧? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 几个月来我一直在做一些简单的 Ope
  • SiteMesh:更改响应的内容类型

    我试图说服 SiteMesh 装饰器更改响应的内容类型 但没有任何乐趣 内容类型最终总是与装饰后的 JSP 相同 而不是装饰器的内容类型 例如 假设我有一个带有标头的 JSP 我还有一个 SiteMesh 装饰器 JSP 它定义了以下内容
  • groupby.first() 和 groupby.head(1) 有什么区别?

    两者都返回每组第一行的 DataFrame 在阅读 API 参考时 它首先说 计算第一组值 但是当并排查看两个输出时 我没有发现重大差异 我错过了什么吗 df pd DataFrame id 1 1 1 2 2 3 3 3 3 4 4 5
  • iPhone - 在 UITextfield 下面显示错误消息的最佳方式是什么[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个包含许多 UITextfields 如名称 密码 电子邮件等 的表单 在验证过程中 我想显示相应文本字段下方字段的错误消息 做这个的最好
  • 抓取和解析多页(aspx)表

    我正在尝试搜集有关灰狗比赛的信息 例如 我想刮http www gbgb org uk RaceCard aspx dogName Hardwick 20Serena http www gbgb org uk RaceCard aspx d
  • 如何在 R 中获取 AST 作为列表

    我有字符串 它描述数学公式 我想将其转换为有意义部分的列表 功能ast 确实知道如何解析它 将其显示为抽象语法树 但不返回 AST 我正在寻找一个返回树的函数 bb lt media urin A media urin B 2 lazyev
  • SLURM 每个节点提交多个任务?

    我发现了一些非常相似的问题 这些问题帮助我得到了一个似乎有效的脚本 但我仍然不确定我是否完全理解为什么 因此这个问题 我的问题 示例 在 3 个节点上 我想在每个节点上运行 12 个任务 总共 36 个任务 此外 每个任务都使用 OpenM
  • javascript 按子列表第二个条目对列表列表进行排序

    如何按最后一个元素的顺序对列表列表进行排序 这是迄今为止我最好的尝试 var mylist 1 c 3 a 5 b mylist sort function a b return a 1 b 1 我打电话给sort没有效果 并且mylist
  • CATextLayer 包裹了 sizeToFit?

    如果我设置textLayer wrapped YES 如何调整大小textLayer包含换行文本 即 我如何获得新的高度textLayer 基本上 我想要类似的东西 UILabel sizeToFit 您需要做的第一件事是获取文本的大小 值
  • 如何使用 Python/Glade 更改主窗口小部件?

    我对 GUI 编程或多或少是个新手 只是有一点点 Perl Tk 经验 我是 Python 新手 也是 Glade 新手 我想学习如何使用它们 我心中有一个程序 需要一个窗口 但该窗口的内容 小部件和所有内容 必须随着用户完成的每一步而改变
  • Model() 获得参数“nr_class”的多个值 - SpaCy 多分类模型(BERT 集成)

    您好 我正在致力于使用新的 SpaCy 模型实现多分类模型 5 类 en pytt bertbaseuncased lg 新管道的代码在这里 nlp spacy load en pytt bertbaseuncased lg textcat
  • Android Google Play 意图引荐来源网址

    我像这样启动 Google Play Intent intent new Intent Intent ACTION VIEW Uri parse market details id com example intent addFlags I
  • CSS 选择器的优先级是什么

    CSS 问题 如果两个不同的选择器应用于一个元素 谁会获胜 我知道这不应该发生 但我想调整遗留应用程序 而 CSS 却处于中间位置 The 血淋淋的细节 http www w3 org TR CSS21 cascade html casca
  • 在计算其他汇总统计数据的同时使用 n()

    我在使用以下方法准备汇总表时遇到问题dplyr基于以下数据集 set seed 1 df lt data frame rep sample c 2012 2016 10 replace T sample c Treat Control 10
  • 在本机反应中出现“无法读取 null 的属性‘pickAlgorithm’”错误

    我在运行时遇到错误npm install 错误是 npm ERR Cannot read property pickAlgorithm of null npm ERR A complete log of this run can be fo
  • 运行 nginx 的 django 服务器上的大型媒体文件出现 403 错误

    我正在使用 Nginx 和 Gunicorn 运行托管在 DigitalOcean 上的 Django 服务器 当我遇到 403 错误时 我尝试通过管理界面添加 2MB 图片 调查error log指示权限被拒绝 如下 2017 06 27
  • 在 Manjaro 上安装 MongoDB

    我在 Manjaro Linux 上安装 MongoDB 社区服务器时遇到困难 没有关于如何在基于 Arch 的系统上安装它的官方文档 并且 Pacman 在 AUR 存储库中找不到它 有人尝试过安装它吗 这是我安装时所做的 由于包装是无法
  • 如何仅使用位移位和逻辑操作将 unsigned int 加 1?

    我的作业 项目中有一个问题 仅使用以下方法将 1 添加到无符号整数位移位 and 逻辑运算符 函数中不应有任何 或 符号 我从前几天开始就在尝试 但还没有成功 到目前为止 我已经尝试过以下操作 int A B C lt lt 1 B C 有
  • 关闭 DataInputStream 也会关闭 FileInputStream 吗?

    FileInputStream fstream new FileInputStream someFile getPath DataInputStream in new DataInputStream fstream 如果我打电话in clo
  • Erlang TCP 套接字关闭

    为了学习 Erlang 我正在尝试实现一个基于gen tcp 不幸的是 我的代码似乎触发了一些有线行为 为了演示这个问题 我附上了我的实现的最小化版本 它足以重现该问题 无论 HTTP 请求是什么 它都只是传递静态 200 OK 当我尝试运