I made a dumb mistake at 3am on this table.  Those ms times are actually seconds.  I've updated the table at this link.  Disregard the table in this email.<div><br></div><div><a href="https://github.com/ericmoritz/wsdemo/blob/master/results.md" target="_blank">https://github.com/ericmoritz/wsdemo/blob/master/results.md</a></div>
<div><br></div><div>If you look at the raw data you will also notice that the handshake times for 2,500 of the 10,000 connections are greater than 742ms which is pretty lousy as well. While none of the TCP connections timed out, 25% of the connections had to wait at least 743ms to start sending messages.</div>
<div><br></div><div>Once the handshake eventually finished, the per-message latency was really good compared to the others with a mean of 17ms.</div><div><br></div><div>Eric.</div><div><br><div class="gmail_quote">On Wed, Jun 13, 2012 at 12:49 PM, envelopes envelopes <span dir="ltr"><<a href="mailto:sunwood360@gmail.com" target="_blank">sunwood360@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">from:  <a href="https://github.com/ericmoritz/wsdemo/blob/master/results.md" target="_blank">https://github.com/ericmoritz/wsdemo/blob/master/results.md</a><div>
<br></div><div>It seems Erlang's connection time is a little bit high. </div>
<div><h2 style="margin:20px 0px 10px;padding:0px;border-width:0px 0px 1px;border-bottom-style:solid;border-bottom-color:rgb(204,204,204);font-size:24px;font-family:Helvetica,arial,freesans,clean,sans-serif">Summary</h2><table style="margin:15px 0px;padding:0px;border:0px;border-collapse:collapse;border-spacing:0px;font:inherit;color:rgb(51,51,51);font-family:Helvetica,arial,freesans,clean,sans-serif;line-height:22px">

<tbody style="margin:0px;padding:0px;border:0px"><tr style="border-top-style:solid;border-top-color:rgb(204,204,204);margin:0px;border-width:1px 0px 0px;padding:0px"><th style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">

Implementation</th><th style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">Connection Time (mean)</th><th style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">

Latency (mean)</th><th style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">Messages</th><th style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">Timeouts</th>

</tr><tr style="margin:0px;padding:0px;border-width:1px 0px 0px;border-top-style:solid;border-top-color:rgb(204,204,204);background-color:rgb(248,248,248)"><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">

Erlang</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">00.865ms</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">00.017ms</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">

2849294</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">0</td></tr><tr style="border-top-style:solid;border-top-color:rgb(204,204,204);margin:0px;border-width:1px 0px 0px;padding:0px">

<td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">Java (Webbit)</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">00.567ms</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">

00.835ms</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">1028390</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">157</td></tr><tr style="margin:0px;padding:0px;border-width:1px 0px 0px;border-top-style:solid;border-top-color:rgb(204,204,204);background-color:rgb(248,248,248)">

<td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">Go</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">00.284ms</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">

18.503ms</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">2398180</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">225</td></tr><tr style="border-top-style:solid;border-top-color:rgb(204,204,204);margin:0px;border-width:1px 0px 0px;padding:0px">

<td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">Node.js</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">00.768ms</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">

42.580ms</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">1170847</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">4299</td></tr><tr style="margin:0px;padding:0px;border-width:1px 0px 0px;border-top-style:solid;border-top-color:rgb(204,204,204);background-color:rgb(248,248,248)">

<td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">Python (ws4py)</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">01.561ms</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">

34.889ms</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">1052996</td><td style="margin:0px;padding:6px 13px;border:1px solid rgb(204,204,204);text-align:left">5208</td></tr></tbody></table>

<p style="margin:15px 0px;padding:0px;border:0px;color:rgb(51,51,51);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">Both the Python gevent/ws4py implementation and the Node.js websocket implementation failed hard with around half of the connections hitting the 2 second TCP connection timeout.</p>

<p style="margin:15px 0px;padding:0px;border:0px;color:rgb(51,51,51);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">I expected Go to kick Erlang's ass in the performance department but the message latency was much higher than Erlang's latency and we had 225 unhappy customers. Go only reached C9.775k; close but no cigar.</p>

<p style="margin:15px 0px;padding:0px;border:0px;color:rgb(51,51,51);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">I did not know what to expect with the Java Webbit implementation. I expected it to perform somewhere close to the Go implementation. The Webbit implementation did do much better than the Go implementation but it still had 157 connection timeouts which is unacceptable.</p>

<p style="margin:15px 0px;padding:0px;border:0px;color:rgb(51,51,51);font-family:Helvetica,arial,freesans,clean,sans-serif;font-size:14px;line-height:22px">I was very surprised that node.js fell down after 5001 connections and that gevent fell down at 4792 connections. Both platforms were specifically built to for the C10k problem and both platforms could barely handle C5k.</p>

</div>
<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>