Racket 使用一个管道在多个设备之间进行通信

Racket 使用一个管道在多个设备之间进行通信,racket,pipe,Racket,Pipe,我目前正在Racket上写一个项目,在那里我需要与一些(模拟的)设备进行通信。我用球拍管来做这个。设备可以从管道中读取数据,并在管道上写入生成的答案。管家还可以在管道上看到生成的答案,并在管道上编写命令 设备可以通过以下代码将消息写入管道: File1: (#%require "communication.rkt") (write-string message output) (flush-output output) 通信输出输入和输出端口: File2: (define-valu

我目前正在Racket上写一个项目,在那里我需要与一些(模拟的)设备进行通信。我用球拍管来做这个。设备可以从管道中读取数据,并在管道上写入生成的答案。管家还可以在管道上看到生成的答案,并在管道上编写命令

设备可以通过以下代码将消息写入管道:

File1:   
(#%require "communication.rkt")

(write-string message output)
(flush-output output)
通信输出输入和输出端口:

File2: 
(define-values (input output) (make-pipe #f))
管家从管道中读出信息:

File3: 
(#%require "communication.rkt")
(if (char-ready? input) 
    (read-string 1 input)
当de steward试图从管道中读取字符串时,“char ready”总是返回#f。。但我确信这些设备会在管道上写东西。有人看到我的问题了吗


谢谢

一,。可能是缓冲——可能“管理员”也需要刷新输出?2.如果可能的话,不用端口和管道,使用球拍通道可能会更干净更简单?3.顺便说一句,我只是好奇为什么你要使用
#%require
而不是
require
?我不确定这一点,但我认为问题是当你
需要一个模块时,它专门为
require
-ing模块实例化了它,因此编写器和读取器都有自己的模块实例——他们看的不是同一个管道。您可以为管道提供每个writer/reader模块的参数,然后让其他模块实例化管道,并将输入和输出管道传递给其他模块。但是,我不知道在多个设备存在运行时边界而不是模块边界的情况下,如何做到这一点。