portunusd

2025-12-07 0 713

PortunusD

Crate

Docs

Roadmap

Tweets

portunusd is a network application server inspired by OpenBSD\’s relayd
and heirloom UNIX inetd. It listens for an incoming network connection,
forwarding the incoming data over an illumos door to the intended
application, and returning the response in a similar manner. portunusd maps
each connected port to a door on the filesystem provided by the target
application.

sequenceDiagram
    participant Client
    participant PortunusD
    participant Door
    participant Application
    Application->>Door: Create /var/run/app.door
    PortunusD->>Door: Open
    PortunusD->>PortunusD: listen on port 80
    loop Handle Requests
        Client->>+PortunusD: Send HTTP Request
        PortunusD->>+Application: Forward request via door_call
        Application->>-PortunusD: Send response via door_return
        PortunusD->>-Client: Send HTTP Response
    end



Loading


The main goal of portunusd is to facilitate the scaling of single-threaded
applications. Under the inetd model, a new process is created to handle every
request. By leveraging doors, portunusd can create a new thread in the
application process only when a new highwater mark of concurrency has been
reached; otherwise, existing threads will be re-used to handle subsequent
requests.

Problem Statement

We want our network-facing applications to scale according to user demand. We
want to minimize the resource cost of our applications when they are idle, and
we want to keep our costs linear in terms of demand. We want to
minimize the degree to which the application developer is responsible for
resource management, and we want to retain (so far as possible) the familiar
development environment of UNIX command line tools.

Picking on Rails as an example, a single-threaded Ruby on Rails application can
handle one user request at a time. Multiple simultaneous requests cannot be
handled without multiple copies of the application resident in memory (on
separate Ruby interpreters). This model consumes a great deal of memory even
when there is little user demand, making it difficult for the host to run other
workloads. Much paging and gnashing of disk will ensue.

Environments such as Node.js deal with this problem by making asynchronicity
more transparent to the programmer. While it can be useful to embrace the
asynchronous nature of computers, it has also introduced changes to languages
that support it; this is not a mere change of syntax, but also a nontrivial
change to the mental model one uses to read, write, and understand programs.

At the other end of the spectrum, CGI applications require a unique process and
address space for each request. These applications can scale linearly with user
demand, including scaling down to zero memory / cpu usage when idle, but the
cost of invoking execv(2) for each request can hamper throughput.

The postmodern \”Serverless\” approach satisfies these criteria, but at the cost
of abandoning the operating sytem. It is a wildly unfamiliar approach to
developing software, and throws away many tools that could be used to observe
and debug the application at runtime.

Thesis

Doors enable a new (old?) model of network application development wherein the
developers are responsible for maintaining and understanding a linear,
synchronous task, while the operating system + web server work together on the
scaling problem

  • When an application is idle, only a single copy of is needed in memory.
  • When a request enters the system, it can be handled by an existing thread.
  • New threads are created only when a new peak of concurrency is reached.

These qualities allow us to address our problem statement by developing network
applications that feel like single-threaded UNIX command line tools, present a
minimal expense when idle, and scale linearly on a per-request granularity.

Of course, doors alone will not handle scaling across the boundary of a single
operating system instance, but a relayd-style collaboration with the firewall
could facilitate this, assuming copies of the application are available on
multiple hosts. This is where portunusd comes in.

Acknowledgements

The social media preview image is by Loudon dodd – Own work, CC BY-SA
3.0.

Many obscure illumos / Rust / Doors questions were answered by @jasonbking.

下载源码

通过命令行克隆项目:

git clone https://github.com/robertdfrench/portunusd.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 portunusd https://www.zuozi.net/31247.html

qso web
上一篇: qso web
tommybox
下一篇: tommybox
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务