<div dir="ltr">The main problem that someone have to implement HTTP-server and websocket-handling code on top of that, since existing implementations (Nowin, websocket implementations on top of XSockets, SuperSockets.NET, etc) are bound to thread pool model. I think it's much better to find some existing HTTP/WebSocket server library, wrap it and use for hosting <a href="http://ASP.NET">ASP.NET</a> vNext applications. It will safe a lot of pain. Althrough it's possible to patch something like Nowin in a way, that it would be able to use both models and switch between them.</div>
<div class="gmail_extra"><br><br><div class="gmail_quote">2014-05-15 21:59 GMT+04:00 Nikita Tsukanov <span dir="ltr"><<a href="mailto:keks9n@gmail.com" target="_blank">keks9n@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Now I'm digging the source code and it seems that second one is quite close to what is needed.</div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-05-15 21:51 GMT+04:00 Nikita Tsukanov <span dir="ltr"><<a href="mailto:keks9n@gmail.com" target="_blank">keks9n@gmail.com</a>></span>:<div>
<div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">There are some existing wrappers:<br><div><a href="https://github.com/kersny/libuv-csharp" target="_blank">https://github.com/kersny/libuv-csharp</a>  - Dead, no commits for 3 years<br>

</div><div><a href="https://github.com/txdv/LibuvSharp" target="_blank">https://github.com/txdv/LibuvSharp</a> - uses Task ( <a href="https://github.com/txdv/LibuvSharp/blob/master/Examples/TcpAsync.cs" target="_blank">https://github.com/txdv/LibuvSharp/blob/master/Examples/TcpAsync.cs</a> ), so it should have same problems with thread pool<br>


</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-05-15 21:41 GMT+04:00 Greg Young <span dir="ltr"><<a href="mailto:gregoryyoung1@gmail.com" target="_blank">gregoryyoung1@gmail.com</a>></span>:<div>

<div><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">That would make sense as the models are different. Also that libuv wrapper from looking looks fairly promising.</div>


<div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 15, 2014 at 8:38 PM, Nikita Tsukanov <span dir="ltr"><<a href="mailto:keks9n@gmail.com" target="_blank">keks9n@gmail.com</a>></span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I think we should have something like Mono.Sockets with abstraction of event loop and I/O code based on libuv or whatever, and build classes like HttpListener on top of it.</div>



<div class="gmail_extra"><br>
<br><div class="gmail_quote">2014-05-15 21:30 GMT+04:00 Nikita Tsukanov <span dir="ltr"><<a href="mailto:keks9n@gmail.com" target="_blank">keks9n@gmail.com</a>></span>:<div><div><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div dir="ltr">I suspect that having libuv behind socket code won't help much, since most of socket performance problems are related to the fact that BeginSend/Recieve, event loop and AsyncCallback run in different threads. Because of that we have overhead even with simple <br>





void ReadNext()<br>{<br>   _socket.BeginRecieve(buf, blablabla, res=><br>   {<br>       _socket.EndRecieve(res);<br>       ReadNext();<br>   });<br>}<div>On windows that works fine because of IOCP behind that abstraction that is designed to be used with thread pool. *nix platforms doesn't have anything like IOCP, only epoll/kqueue, so for actual performance improvement one have to use single-threaded approach (with round-robin connection dispatch between workers), when all I/O operations and event loop run in single thread.<div>





<div><br><br><br></div></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-05-15 20:55 GMT+04:00 Miguel de Icaza <span dir="ltr"><<a href="mailto:miguel@xamarin.com" target="_blank">miguel@xamarin.com</a>></span>:<div>




<div><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello,<div><br></div><div>Well, i want to see a prototype, and then decide.</div><div><br></div><div>So this needs to be done with some kind of peer framework where this is done.</div>





</div><div><div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Thu, May 15, 2014 at 9:29 AM, Greg Young <span dir="ltr"><<a href="mailto:gregoryyoung1@gmail.com" target="_blank">gregoryyoung1@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">






<div dir="ltr">Yes I would say moving both to libuv would be a good move :)</div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 15, 2014 at 4:22 PM, Roope Kangas <span dir="ltr"><<a href="mailto:roope@grandcrugames.com" target="_blank">roope@grandcrugames.com</a>></span> wrote:<br>







<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div>Hi,</div><div><br></div><div>On a tangent...</div><div><br></div><div>It would be really nice if something like libuv would the thing behind Socket code.</div>







<div><br></div><div>Could that be something to investigate?</div><div><br></div><div>Mono could basically piggyback on nodejs development.</div><div><br></div><div>--</div><div>Roope Kangas</div><div><div><div>
<br>On 15.5.2014, at 15.00, Greg Young <<a href="mailto:gregoryyoung1@gmail.com" target="_blank">gregoryyoung1@gmail.com</a>> wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr">So the one issue I have seen with the libevent implementation is that it seems to perform very poorly in windows (+-5k hello worlds/second where as its closer to 100k/second in linux). From researching libevent they supposedly now use IOCP in windows and should be better but I have not been able to make this happen. It may also be worth looking at libuv which is pretty close to a drop in replacement for libevent as it seems to get much better performance in windows and similar performance in linux. @Nikita I will hopefully have some time next week and likely will send some more pull requests in relation to the memory allocation patterns.</div>








<div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 15, 2014 at 6:56 AM, Miguel de Icaza <span dir="ltr"><<a href="mailto:miguel@xamarin.com" target="_blank">miguel@xamarin.com</a>></span> wrote:<br>








<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Nikita!<div><br></div><div>Your approach looks fabulous!   I look forward to trying it out!</div>







<span><font color="#888888"><div>
<br></div><div>Miguel</div></font></span></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 14, 2014 at 11:40 AM, Nikita Tsukanov <span dir="ltr"><<a href="mailto:keks9n@gmail.com" target="_blank">keks9n@gmail.com</a>></span> wrote:<br>









<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>I'll try to implement OWIN host on top of my libevent built-in http server ( <a href="https://github.com/kekekeks/evhttp-sharp" target="_blank">https://github.com/kekekeks/evhttp-sharp</a> ) since for now it's the fastest thing for handling HTTP-requests on Mono I know (now it has host implementation for NancyFx which we are using in production for half of a year).<br>










</div><div><span>Although both evhttp-sharp and FastCGI servers like HyperFastCGI and Fos, are incapable of serving websockets (one because of underlying implementation, another because of limitations of FastCGI protocol), so it would be great to wrap something like <a href="https://github.com/kekekeks/evhttp-sharp" target="_blank">https://github.com/kekekeks/evhttp-sharp</a> which has websocket support and positioned as evhttp drop-in replacement.<br>










</span></div><div><br></div>Regards,<br></div>Nikita<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-05-14 19:29 GMT+04:00 Marcelo Zabani <span dir="ltr"><<a href="mailto:mzabani@gmail.com" target="_blank">mzabani@gmail.com</a>></span>:<div>









<div><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Wow! This is such great news!!<div><br></div><div>As for running Owin applications with Unix HTTP servers, I've developed <a href="http://github.com/mzabani/Fos" target="_blank">Fos</a> on a very permissive license and a focus on good documentation and running with Mono on *nix. I would very much love getting contributions on this, because my spare time is running lower these days.</div>











<div><br></div><div>Hope it helps,</div><div>Marcelo.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 14, 2014 at 12:44 AM, Miguel de Icaza <span dir="ltr"><<a href="mailto:miguel@xamarin.com" target="_blank">miguel@xamarin.com</a>></span> wrote:<br>











<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello guys!<div><br></div><div>Microsoft has open sourced <a href="http://ASP.NET" target="_blank">ASP.NET</a> vNext:</div>











<div><br></div><div><a href="http://github.com/aspnet/home" target="_blank">http://github.com/aspnet/home</a></div><div>
<br></div><div>This is an entire new web stack that only needs the core of Mono (does not even use System.Web.dll!).</div><div><br></div><div>So these are of course great news, because (a) The core Mono has been in active development, and (b) that means that Mono's on the server can be used without all those pesky limitations that have been plaguing us for years.</div>












<div><br></div><div>So we ran into a couple of limitations in Mono: some classes that they need are not implemented (I filed a bug, and a couple of Xamarin folks decided to take on that on their copious spare time) and we have a couple of bugs on FileSystemWatcher on OSX.</div>












<div><br></div><div>But this is a great time to:</div><div><ul><li>Get involved with the <a href="http://github.com/aspnet" target="_blank">github.com/aspnet</a> project and submit contributions that will make the software run on Unix.<br>












<br></li><li>Look into technologies like Owin and Katana (sp?) and help us have a story that plugs into Unix HTTP servers (the equivalent of our bridge between Apache and mono: mod_mono, or our Fast CGI bridge to mono).<br>












<br></li><li>Take Mono's new profiling tools and performance counters for a spin and help us fine tune the runtime to run .NET code faster on Unix than you can on Windows.  While this is a tall order, my friend David Miller would expect nothing less from us.</li>












</ul><div>Hugs and love,</div></div><div>Miguel</div></div>
<br>_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
<br></blockquote></div><br></div>
<br>_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
<br></blockquote></div></div></div><br></div>
<br>_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Studying for the Turing test</div>
</div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>Mono-devel-list mailing list</span><br><span><a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a></span><br>







<span><a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a></span><br></div></blockquote></div></div></div><br>_______________________________________________<br>








Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Studying for the Turing test</div>
</div>
</div></div><br>_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
<br></blockquote></div></div></div><br></div>
</blockquote></div></div></div><br></div>
<br>_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Studying for the Turing test</div>
</div>
</div></div></blockquote></div></div></div><br></div>
</blockquote></div></div></div><br></div>
</blockquote></div><br></div>