2011/8/18 ori brost <span dir="ltr"><<a href="mailto:oribrost@gmail.com">oribrost@gmail.com</a>></span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I will describe my exact problem, maybe there are other solutions i<br>
did not think of.<br>
Our program provides a websocket service over a port. We wish to allow<br>
people without a websocket supporting browser to use it so we use a<br>
flash object to do websocket when the browser can't. In order for this<br>
to work, the flash object needs to get a flash policy file. Flash<br>
forces the file to be in one of two places:<br>
- port 843 (flash hard coded)<br>
- the port of the ws service<br>
Note that the flash protocol is NOT HTTP based.<br>
Originally we worked with 843, but we then decided to put out server<br>
behind an Amazon ELB. Amazon ELB does not allow port forwarding for<br>
ports below 1024 which are not 80 or 443, so our only choice was to<br>
implement the flash policy file server in the same port via a patch to<br>
mochiweb (<a href="https://github.com/nivertech/mochiweb/tree/ori_flash_170811" target="_blank">https://github.com/nivertech/mochiweb/tree/ori_flash_170811</a>).<br>
We also thought of putting the websocket service behind an haproxy<br>
instead of ELB, but ELB is better because it is also hardware based<br>
unlike haproxy which is only software.<br>
<br>
Do you see any other solution for this?<br>_______________________________________________<br><div><div class="h5">
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>
</div></div></blockquote></div><br><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><div>Hi!</div><div><br></div><div>This is a shameless plug for cowboy, putting this aside, I think it you would end up with a solution similar to this if you were to patch mochiweb suit this usecase.</div>
<div><br></div><div>I wrote a blog post on getting started using cowboy for non-http protocols yesterday because of a question on IRC wrt. to finding a reusable acceptor/handler pool for connection oriented servers. You will find it here: <a href="http://mklaar.posterous.com/accepting-and-handling-tcp-connections-with-c" target="_blank" style="color: rgb(0, 0, 204); ">http://mklaar.posterous.com/accepting-and-handling-tcp-connections-with-c</a></div>
<div><br></div><div>Now, you would be able to write a protocol module such as flash_policy_or_http_protocol that read N bytes from the socket, if they match an HTTP method, you can call the cowboy_http_protocol:init/4 and handle it as an HTTP request. If they match what you expect to find at the head of a flash policy request you can call flash_policy_protocol:init/4.</div>
<div><br></div><div>The only change I anticipate that you would have to make to cowboy itself would be to add an option for injecting an intial buffer into the cowboy_http_protocol state to ensure that erlang_decode:packet doesn't start reading in the middle of the input.</div>
<div><br></div><div>(I failed at the internet, I'm sorry if you receive duplicates of this email)</div><div><br></div><div>MVH Magnus Klaar</div></span></div>