如何在单进程中管理多个PTY且无需直接处理协议I/O?
类BBS程序的I/O架构选型疑问
现有主/远程模型的情况
我熟悉基于套接字的主/远程模型:
- 主进程以守护进程形式运行,承载应用核心功能
- 远程TTY连接建立时,启动独立的
remote_process进程 remote_process通过Unix domain socket与主进程通信,主进程为每个远程TTY的I/O分配独立线程- 所有功能模块均运行在主进程内
这个模型适合常规CLI程序,但对交互性强的场景(比如使用ncurses)存在明显局限:关键的termios终端控制逻辑位于远程进程中,无法在主进程中直接使用,也不能通过套接字传输。如果沿用该模型,必须把大量交互逻辑迁移到remote_process中,违背了核心逻辑集中在主进程的设计初衷。
当前的核心需求与困境
主/远程模型的最大优势是协议抽象:无需关心连接来源(Telnet、SSH、串口等),也不用自行处理Telnet/SSH的协议细节,流程如下:
Telnet连接流程
- 入站Telnet连接建立
- Telnet服务器启动自定义登录shell
/usr/sbin/remote_process remote_process启动后与主进程通信
SSH连接流程
- 入站SSH连接建立
- 完成身份验证
- SSH服务器启动自定义登录shell
/usr/sbin/remote_process remote_process启动后与主进程通信
我希望实现的目标是:在单进程内统一管理所有TTY,同时避免自行实现Telnet/SSH等协议的细节。
尝试过的思路存在问题:
- 让主进程直接监听网络套接字、处理Telnet/SSH流量:需要自行实现协议逻辑(比如SynchronetBBS的做法),不符合需求
- 核心逻辑分散到每个TTY进程、主进程仅做IPC:不利于系统级模块的动态加载/卸载,已排除
疑问
是否存在满足上述需求的方案?如果有,请从高层级说明TTY的设置流程,以及进程、套接字、TTY三者的交互方式。
内容的提问来源于stack exchange,提问作者InterLinked
相关产品推荐
相关产品推荐

