第四章 解析器
下面PJSIP解析器的一些特征:
1. 它是自顶而下,手写的解析器。它使用了PJLIB的扫描器,此scanner速度很快,并减轻了解析器的复杂性。这样增加解析器可读性。
2. 如上所述,执行速度很快。在一台P412.6GHz机器上,1秒钟可以解析68k个800bytes的SIP消息或860k个80bytesde 的URIs。
3. 它是可重入的。这使它在多处理器的机器上具有扩展性。
4. 它具有可扩展性。可以使用模块向解析器插入新的URI或头部域。
解析器采用了许多可以想到的技巧来获取最高性能:
1. 它对所有消息元素使用零拷贝。即当一个元素(如pvalue)解析后,解析器并不会拷贝pvalue的内容到消息中的相应字段,而只是将指针和长度存放到消息中相应的字段中。这样做,是因为PJSIP在整个库中使用pj_str_t类型,不需要字符串以NULL结尾。
2. 它使用PJSIP的内存池(pj_pool_t)来为消息结构的内存分配。这比传统的malloc()函数快了好几倍。
3. 它使用