练习47:一个快速的URL路由
我现在打算向你展示使用来创建服务器中的快速URL路由。它适用于应用中的简单的URL匹配,而不是在许多Web应用框架中的更复杂(一些情况下也不必要)的路由发现功能。
我打算编程一个小型命令行工具和路由交互,他叫做urlor
,读取简单的路由文件,之后提示用户输入要检索的URL。
一旦你使urlor
工作,并且创建了路由文件,你可以尝试这样:
你可以看到路由系统首先尝试精确匹配,之后如果找不到的话则会尝试前缀匹配。这主要是尝试这二者的不同。根据你的URL的语义,你可能想要之中精确匹配,始终前缀匹配,或者执行二者并选出“最好”的那个。
URL非常古怪。因为人们想让它们神奇地处理它们的web应用所具有的,所有疯狂的事情,即使不是很合逻辑。在这个对如何将TSTree
用作路由的简单演示中,它具有一些人们不想要的缺陷。比如,它会把/al
匹配到Album
,它是人们通常不想要的。它们想要匹配到Album
以及/al
匹配到404错误。
另一件你能在真正的路由系统里做的事情,就是使用来寻找所有可能的匹配,但是这些匹配是需要检查的一些模式串。在许多web应用中,有一个正则表达式的列表,用于和每个请求的URL进行匹配。匹配所有这些正则表达式非常花时间,所以你可以使用TSTree
来通过它们的前缀寻找所有可能的结果。于是你就可以缩小模式串的范围,更快速地做尝试。
使用这种方式,你的URL会精确匹配,因为你实际上运行了正则表达式,它们匹配起来更快,因为你通过可能的前缀来查找它们。
这种算法也可用于所有需要用户可视化的灵活路由机制。域名、IP地址、包注册器和目录,文件或者URL。
- 将URL映射到
.so
文件而不是任意的名字,并且使用dlopen
系统动态加载处理器,并执行它们所包含的回调。将这些回调放进你的Handler
结构体中,之后你就用C编写了动态回调处理器系统的全部。