我无法理解如何实现非阻塞I / O。这是我目前的架构:
服务器
socket()
)bind()
转换为IP的端口号listen()
用于传入连接while(1)
循环{
accept()
传入连接fork()
)一个新的子进程来处理recv()
和send()
ing 客户
socket()
)connect()
客户端套接字到服务器套接字while(1)
循环{
pipe()
为父级和子级进程创建管道文件描述符stdin
读取用户输入(始终可用,即不阻止)
fork()
)一个新的子进程来处理用户输入,send()
和recv()
往返于服务器套接字的输入write()
会发送给父进程read()
从子级输出消息并打印到终端,而不会阻塞stdin 我需要更改什么?我只希望能够在 client 终端中键入一条消息,让client子进程在后台与服务器通信,格式化输出和所有内容,然后一旦准备好输出,就可以了输出,而不会阻止我在 client 终端中输入更多请求。
例如,如果我要让终端机睡眠10秒钟,然后返回“我醒了!”在那段时间过去之后。同时,我无需等待 client 终端就能处理其他请求。
Enter a command: sleep 10
Enter a command: sendfile text.txt
Enter a command: echo money
money
Enter a command: echo hello
hello
I'm awake!
Enter a command: