相关疑难解决方法(0)

如何设计灵活的Erlang协议栈创建API

不满意我目前的方法我只是想重新设计我在Erlang中构建协议栈的方式.按重要性排序的功能:

  1. 性能

  2. 灵活性和实施速度增加了新的协议变体

  3. 从shell开始探索协议变体将有助于开发

我现在的模型(在这个问题中描述的alreday)除了函数调用和消息接收的send()的丑陋不对称之外,正在达到极限.

整个协议引擎的整体情况如下所示:

底部:

  • 在每个堆栈的底部有几个端口或者有时也可能是gen_tcp(独立通道有多个相同的堆栈,所以我们不能在这里注册流程太静态,必须在任何地方传递Pids.

  • 在端口之上是一些由主管管理的模块(从系统开始并且在没有错误的情况下保持整个生命周期).

上半部分:

  • 由事件发生触发(在一般意义上不在event_handler意义上)是面向连接的协议结束(例如,具有connect()close()语义.

  • 协议栈的最高端可能只能动态启动,因为堆叠在一起以形成堆栈的模块是动态可配置的,并且可能会从连接变为连接.

  • 目前计划将传递一个模块名称列表+来自顶层的可选参数,这些参数在connect()被调用时被消耗掉.

  • Toplevel进程将被链接,因此当出现任何错误时,整个连接都会失败.

模块的类型和它们之间的通信类型

到目前为止,发现了几种模块:

  • 无状态过滤器模块

  • 具有状态的模块,一些适合gen_server,一些gen_fsm但大多数可能是简单的服务器循环,因为选择性接收将非常有用并且经常简化代码.

层之间的通信类型:

  • 独立发送和接收数据包(从外部看独立)

  • 发送内容的同步调用,阻塞直到有答案,然后将结果作为返回值返回.

  • 对多个模块进行对话的多路复用器(这是我在这里的定义以便于讨论)

  • 具有不同附着点(当前由原子命名)的解复用器与面向上的模块通信.

目前我唯一的解复用器位于堆栈的静态底部,而不是动态创建的顶部.多路复用器目前仅位于顶部.

在我之前链接的问题处理的答案和评论中,我听说API通常只包含函数而不是消息,除非另有说服,否则我同意这一点.

请原谅问题的冗长解释,但我认为它仍然适用于各种协议实现.

我将在答案中编写我迄今为止计划的内容,并且还将在稍后解释最终的实现和我的经验,以便在此处实现一些有用的东西.

erlang protocols erlang-otp

8
推荐指数
1
解决办法
732
查看次数

Erlang 多态性:同一个合约的多个实现?

什么是正确的 Erlang 方式将实现与合约分离以及如何在它们之间切换?

polymorphism erlang

6
推荐指数
1
解决办法
967
查看次数

标签 统计

erlang ×2

erlang-otp ×1

polymorphism ×1

protocols ×1