使用 OTP 原理的非阻塞 TCP 服务器

2024-03-26

我开始学习 Erlang,所以我尝试写“hello, world!”并发编程,IRC 机器人。

我已经使用 Erlang 编写了一个,没有任何 OTP 细节(管理程序、应用程序等行为)。我希望使用 OTP 原则重写它,但不幸的是我无法找出使用 OTP 进行套接字编程的“正确”方法。

似乎唯一合理的方法是手动创建另一个进程并将其链接到主管,但肯定有人在某个地方之前已经这样做过。


我认为这就是您正在寻找的:http://www.trapexit.org/Building_a_Non-blocking_TCP_server_using_OTP_principles http://www.trapexit.org/Building_a_Non-blocking_TCP_server_using_OTP_principles这是关于如何使用 OTP 构建非阻塞 TCP 服务器的完整教程(当然,有完整的文档和解释)。

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

使用 OTP 原理的非阻塞 TCP 服务器 的相关文章

  • Erlang 生成问题

    我在 erlang 中遇到了 spawn 问题 似乎进程在一段时间后就死掉了 这是简单的代码 module simple export server 1 client 1 owner 1 spawn n 2 start 1 main 1 s
  • 如何识别用户空间和内核空间之间的特定套接字?

    我在用户空间中有一个库 可以拦截套接字层调用 例如socket connect accept 等等 我只处理 TCP 套接字 在内核空间中 我有一个网络内核模块 它处理所有 TCP 连接 我需要能够在驱动程序中识别哪些套接字被用户空间库拦截
  • 连接被对等方重置:套接字写入错误。我的 Java 代码出了什么问题

    我正在尝试从独立的 java 应用程序创建并维护到主机的 TCP 连接 本地端口和服务器端口相同 8999 连接后 我必须向服务器发送一条消息 lt STX gt username fred password abcd lt ETX gt
  • 在 Erlang 中使用完全限定的函数调用?

    我刚刚学习了如何在 Erlang 中升级模块 并且我知道只有使用完全限定名称的函数调用 例如module function 重新链接 到加载到 VM 中的当前版本 但未指定模块名称的函数调用不会 重新链接 到当前版本 而是继续使用旧版本 关
  • 为什么在数据包输入时 skb_buffer 需要跳过 20 个字节才能读取传输缓冲区?

    我正在 Linux 中编写一个网络模块 我发现只有在从 skb 缓冲区跳过 20 个字节后才能提取 tcp 标头 即使 API 是 skb transport header 其背后的原因是什么 有人可以详细解释一下吗 传出数据包不需要同样的
  • 为什么我无法发送这个IP数据包?

    我正在尝试使用 C 发送 IP 数据包 destAddress IPAddress Parse 192 168 0 198 destPort 80 Create a raw socket to send this packet rawSoc
  • 我的代码中某处存在无限循环

    我有这个 Java 游戏服务器 最多可处理 3 000 个 tcp 连接 每个玩家或每个 tcp 连接都有自己的线程 每个线程的运行情况如下 public void run try String packet char charCur ne
  • RabbitMQ 失败,错误:无法连接到节点rabbit@TPAJ05421843:nodedown

    在 Windows 7 Enterprise 计算机上 我全新安装了 Erlang 17 4 和 RabbitMQ 3 4 3 x64 安装成功且顺利 我还没有尝试创建我的第一个队列或交换器 但我已经看到了麻烦 这个问题类似于另一个SO帖子
  • 如何使用 kotlin 通过 TCP 连接发送和接收字符串

    我在 Windows 上有一个 TCP 服务器 我想在服务器和我的 Android 设备之间发送和接收文本字符串 我花了很多时间搜索使用 Kotlin 的示例 但没有找到任何有用的代码 所以我现在只能创建套接字并连接 fun connect
  • ejabberd 和 Erlang 安装,lager_transform 未定义

    我是 Erlang 新手 我一直在尝试在 EC2 ubuntu 机器上安装 Erlang 和 ejabberd 一切都很顺利 直到我开始编译一些外部模块ejabberd 它开始抛出错误undefined parse transform la
  • 在 C# 中通过 TCP 发送 C 结构体

    我正在编写一个程序 通过 TCP 与一台设备的管理界面进行交互 问题是 设备的文档是用C写的 而我写的程序是用C 写的 我的问题是 文档指定 通信基于基于C结构的API缓冲区 再多的谷歌搜索似乎也无法让我找到这个 API 或如何通过 TCP
  • 我们如何有效地处理 mnesia 记录的时间相关约束?

    我正在将记录写入mnesia 该记录应该保存在那里 仅在允许的时间 24 小时 内 24小时后 在用户修改其中的一部分之前 系统应该自动删除它们 例如 用户获得免费通话时间 用于语音通话 他们应该在给定时间内使用它们 如果他们不使用它 24
  • 由于将请求从主线程传递到工作线程,netty 中出现延迟?

    我有一些关于 Netty 服务器端 TCP IP 应用程序的问题 我想知道在将请求从老板线程传递到工作线程时是否会因为 netty 由于缺少配置等 而出现延迟 我在用 new OrderedMemoryAwareThreadPoolExec
  • syn队列和accept队列的混淆

    在阅读TCP源码时 我发现一个困惑的事情 我知道 TCP 在 3 次握手中有两个队列 第一个队列存储服务器收到的连接SYN并发回ACK SYN 我们称之为同步队列 第二个队列存储3WHS成功并建立连接的连接 我们称之为接受队列 但在阅读代码
  • Scapy 不需要的 RST TCP 数据包

    为了理解TCP是如何工作的 我尝试伪造自己的TCP SYN SYN ACK ACK 基于教程 http www thice nl creating ack get packets with scapy http www thice nl c
  • Erlang 参与者与 OOP 对象有何不同?

    假设我有一个 Erlang actor 定义如下 counter Num gt receive From increment gt From self new value Num 1 counter Num 1 end 同样 我有一个 Ru
  • 为什么我们可以将 sockaddr 转换为 sockaddr_in

    我明白为什么强制转换很有用sockaddr to sockaddr in 但我不明白这怎么可能 据我所知 它们的大小相同sockaddr in添加了sin zero使其大小相同 我想知道编译器如何知道从哪里获取信息sockaddr in如果
  • 数据包丢失和数据包重复

    我试图找出数据包丢失和数据包重复问题之间的区别 有谁知道 数据包重复 是什么意思 和TCP检测到丢失时重传数据包一样吗 No In TCP 数据包 的传递是可靠的 我认为在这种情况下术语数据应该更好 因为它是面向流的协议 数据包丢失和重复是
  • C# Socket.receive连续接收0字节且循环中不阻塞

    我正在尝试用 C 编写一个最简单的多线程 TCP 服务器 它接收来自多个客户端的数据 每次连接新客户端时 都会建立套接字连接 并将套接字作为参数传递给新类函数 之后运行 while 循环并接收数据 直到客户端连接为止 这里的问题是 sock
  • Erlang:如何将小数转换为填充零的十六进制字符串

    我想在 Erlang 中将 42 基数 10 转换为 000002A 基数 16 我在网上找到了一些提示 io format 8 0B n 42 gt 00000042 And io format 16B n 42 gt 2A 但我似乎无法

随机推荐

  • 如何在 Android 上正确初始化和终止 EGL

    虽然有很多关于在 Android 上使用 OpenGL ES 的示例 但所有这些示例在 EGL 的初始化 终止方面似乎都是不正确的 即使是 Android SDK NDK 附带的示例 问题的根源在于 Android 应用程序模型 这使得 E
  • 在 Linq to SQL 中重写 NHibernate 应用程序

    我有一个使用 NHibernate 编写的过时的应用程序 现在我想重写它 包括新功能和模型的重大变化 使用 Linq to SQL 而不是 NHibernate 的主要缺点是什么 使用 LINQ to SQL 可能会出现哪些问题 将 Dat
  • GIT - 无法忽略 .suo 文件

    我正在尝试与同事一起在用 C 编写的应用程序中使用 Git 我们已将条目 project1 suo 添加到 gitignore 文件中 但每次我们必须提交该项目时 Git 似乎都会告诉我们也提交文件 project1 suo 我们尝试了很多
  • 安卓smali问题

    我目前正在对 smali 代码混淆器 进行一些研究 并且目前正在尝试熟悉反编译的源代码 为此 我创建了一个简单的应用程序并通过 smali 对其进行了反编译 我现在试图了解反编译的源代码 以改进和比较稍后使用代码混淆器后的安全性 针对反编译
  • 下载失败:未安装自制安装的“curl”

    命令 brew install php 每次我想在 Mac 上更新 php 时 我总是会收到如下错误 Downloading https www freetds org files stable freetds 1 3 13 tar bz2
  • Python 的 time.clock() 与 time.time() 的准确性?

    Python 中计时用哪个更好 time clock 还是 time time 哪一个提供更高的准确性 例如 start time clock do something elapsed time clock start vs start t
  • Google App Engine 始终开启功能

    有人可以解释一下 Google App Engine 中的 始终开启 功能是什么吗 它有什么用 举例说明将不胜感激 始终开启功能是否适用于任务队列 基本上 Google 会在没有流量时关闭应用程序引擎应用程序实例 通过此功能 您可以支付额外
  • 在reactJs中添加动态状态

    我创建了一个 ReactJs 页面 允许管理员将用户添加到平台 现在 管理员可以在提交表单之前添加尽可能多的用户 而不是为每个新用户提交表单 默认情况下 会显示一个包含输入字段的表行 然后单击 添加 按钮 会添加一个新行 管理员可以填写必要
  • 在 rspec 测试中发布到不同的控制器

    如何发布到与测试脚本当前指向的控制器不同的控制器 例子 在 user controller spec rb 中 it should just post to users do post create params this goes to
  • 运行maven时禁止Jasper库下载:mvn package

    我正在下载 Intellij Idea 中的 Spring 项目所需的所有库 我正在使用maven mvn包 除了被禁止的库之外 所有库都成功了 ERROR Failed to execute goal on project remax s
  • 当缓冲区只读时定义键

    当我的缓冲区是只读的 是的 我很懒 时 我尝试以与 C n 和 C p 相同的方式使用键 n 和 p 我在 emacs 文件中使用此代码 when buffer read only local set key n next line whe
  • CefSharp ChromiumWebBrowser - 未显示/渲染

    我有一个简单的应用程序 Grid with a ChromiumWebBrowser里面 当我创建ChromiumWebBrowser在 XAML 中 它可以工作 但是当我从代码隐藏创建它并将其添加到网格时 它不会显示 我只得到网格的黑色背
  • 仅从datetime sql获取日期而不转换为varchar,以便我可以在excel中对其进行排序

    当前 sql 返回日期为 2013 07 01 00 00 00 000 我只想要 mm dd yyyy 格式的日期部分 这样当我将其导出到 Excel 时 我仍然可以根据升序或降序进行排序 我尝试了 varchar 但它没有在 Excel
  • 限制代理可以建立的链接数量

    我有乌龟链接 如果它们的 var1 具有相同的值 这很好 我想将链接数量限制为三个 我在代码的链接部分之前添加了一个 IF 语句 If count my links lt 3 但不起作用 代理继续链接超过我设置的最大值 我读了另一个问题如何
  • 是否可以使用 PIL 减少图像的深度?

    是否可以使用 PIL 减少图像的深度 比如说从常规 8bpp 变为 4bpp 您可以轻松转换图像模式 只需调用im convert newmode 在图像对象上im 它会给你一个新的所需模式的新图像 但没有 4bpp 的模式 列出了支持的模
  • Angular2-mdl 和 webpack

    我已按照以下位置提供的步骤进行操作https www npmjs com package angular2 mdl https www npmjs com package angular2 mdl并使 Angular2 mdl 完美工作 但
  • 如何获取 Kotlin AST?

    我有一个包含 Kotlin 源代码的字符串 如何在运行时编译它并获取抽象语法树和类型信息进行分析 我对 Kotlin 编译器进行了一些调查 一些获得 AST 的概念证明可以在我的网站上看到GitHub 仓库 https github com
  • 使用 Microsoft Git Provider 时,为什么无法在 Visual Studio 2012 的 TFS 插件中查看工作平面?

    自从我安装了微软 Git 提供商与我托管的 Git 控制的 项目完全集成tfs visualstudio com the My Work窗格上的VS2012 的 TFS 插件 顺便说一句 我正在使用VS2012 Ultimate 不再出现
  • 如何在用户触摸图像时擦除图像的一部分

    我的总体目标是在图像上有一个灰色区域 然后当用户摩擦该灰色区域时 它会显示下面的图像 基本上就像一张彩票刮刮卡 我已经在文档和该网站上进行了大量搜索 但找不到解决方案 以下只是测试根据用户触摸位置 擦除 图像的概念证明 但它不起作用 我有一
  • 使用 OTP 原理的非阻塞 TCP 服务器

    我开始学习 Erlang 所以我尝试写 hello world 并发编程 IRC 机器人 我已经使用 Erlang 编写了一个 没有任何 OTP 细节 管理程序 应用程序等行为 我希望使用 OTP 原则重写它 但不幸的是我无法找出使用 OT