<div dir="ltr">I figured out that the most costly thing is the creation of 2 RCW (Runtime Callable Writer) per request. As long as I don't spam COM object instances it should be fine. Althrough it wouldn't be really COM-way for request/response objects.<br></div><div class="gmail_extra"><br><div class="gmail_quote">2014-12-03 23:29 GMT+03:00 Rafael Teixeira <span dir="ltr"><<a href="mailto:monoman@gmail.com" target="_blank">monoman@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I would say in the interop calls, you'll need to drop COM and implement custom marshalling to avoid messy copying/conversion of structs and strings (CLR uses UTF-16 strings internally and I didn't dig into proxygen or your COM wrapper to see what it uses, but probably it is utf-8 or some multi-byte encoding, so at least some conversions will be needed)<br><br><div class="gmail_quote"><div><div class="h5">On Wed Dec 03 2014 at 3:59:40 PM Nikita Tsukanov <<a href="mailto:keks9n@gmail.com" target="_blank">keks9n@gmail.com</a>> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><div><div><div><div><div><div><div><div>Hello. Have you guys heard of the proxygen ( <a href="https://github.com/facebook/proxygen/" target="_blank">https://github.com/facebook/proxygen/</a> ) - an HTTP stack library recently released by Facebook? It supports HTTP, SPDY, websockets and will support HTTP/2.0 later.<br><br></div></div>I was playing around with it and created some initial bindings that allow to write code like this:<br><a href="https://github.com/kekekeks/prowingen/blob/master/managed/Sandbox/Program.cs" target="_blank">https://github.com/kekekeks/prowingen/blob/master/managed/Sandbox/Program.cs</a> <br><br></div>It performs rather good, I've got 41K requests/sec on my laptop, but obliviously needs a lot more work for production use.<br></div><div><br></div>1) Is anyone interested in this sort of thing? I was initially planning to implement an OWIN server on top of proxygen, but now I'm not so sure, since I'm currently using my wrapper to libevent's HTTP server ( <a href="https://github.com/kekekeks/evhttp-sharp/" target="_blank">https://github.com/kekekeks/evhttp-sharp/</a> ) and quite happy with it's performance which is almost the same (up to 38K rps on the same machine, both benchmarks without thread pooling). The only thing it lacks is websocket support, but I can live with that. Proxygen also can't be compiled for Windows platform at all, so that server will be mono-only.</div><br>2) Does anyone have benchmark data on Kestrel? When I hammer it with ab or wrk it just hangs and stops responding to any requests. If it can keep up with proxygen in terms of performance, such bindings would be useless.<br></div><br>3) Is there any way to speed up interop calls? When I replace C++ handler implementation with managed one that does essentially the same thing, the performance drops drastically, i. e. from 130K to 40K rps). Currently I'm using COM as a bridge ( with some basic infrastructure native->managedimplementation - <a href="https://github.com/kekekeks/prowingen/blob/master/native/include/com.h" target="_blank">https://github.com/kekekeks/prowingen/blob/master/native/include/com.h</a> ). Is there a better way?<br><br></div>Regards,<br></div>Nikita<br></div></div></div>
______________________________<u></u>_________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.<u></u>com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/<u></u>mailman/listinfo/mono-devel-<u></u>list</a><br>
</blockquote></div>
</blockquote></div><br></div>