我一直在写一台GO服务器,该服务器充当node.js的子过程。
package main
import (
"bufio"
"encoding/json"
"fmt"
"os"
)
// IPC delimiter
const EOT byte = 3
func main() {
// Listen on stdin for messages sent from the parent process.
reader := bufio.NewReader(os.Stdin)
for {
input, err := reader.ReadString(EOT)
if err != nil {
fmt.Printf("sockets: failed to read from stdin: %v", err)
if err == io.EOF {
return
}
continue
}
// Strip EOT bye
input = input[:len(input) - 1]
var payload Payload
if err := json.Unmarshal([]byte(input), &payload); err != nil {
fmt.Printf("sockets: failed to read from stdin: %v", err)
continue
}
}
}
但是,使用stdin/stdout这样的使用,可以防止该代码能够登录到控制台,因为父进程使用了stdouts hange。理想情况下,我会使用文件描述符4来利用节点的使用方式,只有问题是我对Windows的细致细节毫无意义。我如何使用Windows上IPC的等效(如果有)/dev/fd/4?
?ps:如果有一种更好的方法来处理stdin的阅读,这也会对我有很大帮助。
您可以尝试os.NewFile
:
f := os.NewFile(4, "my_fd_4")