sogou/workflow

关于http解析部分的一些疑惑

predatorbigbear opened this issue · 6 comments

01

我看了一下workflow的代码 ,关于http解析这里发现有很多关键节点数据比如method version这些用了strdup函数 然后我查了一下
其实如果可以做到不拷贝 设置首尾指针指向的话这样会更高效

你好。这个地方进一步优化的话,是可以使用原来的空间保存数据,哪怕加上‘\0'破坏原始掉数据都没有什么问题,这样可以减少一些malloc和free。但同时我们还支持set header,set version这样的操作,所以如果是用户传进来的数据,那也不可避免的要重新分配空间,然后内部做标记来决定要不要free。
目前这个parser肯定没有做到极致,但我们目前各种性能测试里并没有发现parser占用太多CPU,不太可能是性能瓶颈。你可以结合实际应用试一下。

可以贴一下您的代码我们参考一下。parser这块我们尽量做成ansi c的,优化的空间肯定有,主要还是减少malloc和free,内存copy可能影响反而不大,毕竟header就那么点字节。你可以整体跑一下我们的框架看看性能问题。

嗯嗯,您描述的使用场景是比较适合用我们的框架来实现的,之后希望能试一试。你也可以先用workflow写一点简单的中转服务器体会一下用法。可以参考http_proxy的示例。如果需要并发访问下游就简单创建一个parallel任务就可以了,可以实现真正的全异步。