课后作业 (编程)
在这个简短的作业中,您将获得有关基于事件的代码的关键概念以及经验。 祝好运!
问题:
1.首先,编写一个可以接受并提供 TCP 连接的简单服务器。 如果您不知道该怎么做,则必须自己在 Internet 上摸索。 构建的这个服务器一次可以处理一个请求; 让每个请求都非常简单,例如获取一天中的当前时间。
cd code && make && ./socket
2.现在添加 select() 接口。 构建一个可以接受多个连接的主程序,以及一个事件循环, 该事件循环检查哪些文件描述符上有数据,然后读取并处理这些请求。 确保仔细测试您是否正确使用了 select()。
cd code && make && ./socket-select
3.接下来,让我们使请求更有趣一点,以模仿简单的 Web 或文件服务器。 每个请求都应读取文件的内容(文件名在请求中),
服务器应通过将文件读取到缓冲区中进行响应,然后将内容返回给客户端。 使用标准的 open(),read(),close()
系统调用来实现此功能。在这里要小心一点
:如果长时间运行它,可能有人会想出如何使用它来读取计算机上所有文件的!
cd code && make && ./socket-select-file
4.现在放弃标准 I/O 系统调用,使用本章中介绍的异步 I/O 接口。 将异步接口合并到程序中有多难?
5.为了让问题更有趣一些,在代码中添加一些信号处理。 信号的一种常见用法是通知服务器以重新加载某种配置文件,或让服务器进行其他管理措施。 向服务器添加用户级文件缓存,该缓存存储最近访问的文件。 实现一个信号处理程序,该信号处理程序在将信号发送到服务器进程时清除缓存。
6.最后是比较困难的部分: 如何判断构建一个异步的、基于事件的服务是否有价值?你能创造一个测验来展示它的优点吗?你的方法增加了多少实现复杂性?