[erlang-questions] Mochiwebsockets was Re: Long polling

Gordon Guthrie gordon@REDACTED
Fri Jul 20 10:33:19 CEST 2012


Loic

> Mochicow is plugged on top of Cowboy and replaces Mochiweb entirely.

At the moment Mochiweb does it stuff and passes a MochiRequest into my handler.

We then parse that MochiRequest, do a load of authentication on it and
pass it into essentially some pattern matchers that handle POST's,
GET's, content negotiation, blah-blah-blah.

Are you saying that Cowboy would take an incoming request, parse it,
decide - 'this is a long poll - pass it to bullet', 'this isn't pass
it to mochicow' and the mochicow would give me an identically formed
MochiRequest 'just like mochiweb'?

We also make a lot of use of the mochijson/mochihex libraries to
handle our JSON, hex and stuff - I could probably just pull those
libraries out...

Gordon

On 19 July 2012 23:46, Loïc Hoguin <essen@REDACTED> wrote:
> Just Cowboy.
>
> Mochicow is plugged on top of Cowboy and replaces Mochiweb entirely.
>
> You don't need a "socket server", whatever that is, you can just use
> websockets directly in Cowboy, or if you need a long polling fallback
> there's Bullet available, which is just a library of one module + one js
> file really. Either way they don't try to anticipate your needs, they just
> transport data.
>
>
> On 07/20/2012 12:42 AM, Gordon Guthrie wrote:
>>
>> Loïc
>>
>> So I would then have 3 things running my application - mochiweb,
>> cowboy and a socket server...
>>
>> I am a big fan of avoiding code at all costs :(
>>
>> Given that I have a simple understood use case, mebbies I don't need a
>> fully featured socket server, mebbies I need to put a simple
>> client-driven registration system...
>>
>> Gordon
>>
>> On 19 July 2012 23:24, Loïc Hoguin <essen@REDACTED> wrote:
>>>
>>> Or you can replace Mochiweb by Cowboy+Mochicow
>>> (https://github.com/benoitc/mochicow) and use Cowboy's routing to
>>> redirect
>>> to your websocket handler or your mochiweb code.
>>>
>>>
>>> On 07/19/2012 11:02 PM, Gordon Guthrie wrote:
>>>>
>>>>
>>>> Gleb
>>>>
>>>> The app is built on mochiweb - I inspect the request and route it to a
>>>> handler. So I would need to bind the server part of the library to the
>>>> that particular HTTP request.
>>>>
>>>> Bullet is designed to work in Cowboy,
>>>> Socket.io has its own Erlang server
>>>> SockJS is designed to be web-framework agnostic but the examples are
>>>> all in Cowboy
>>>>
>>>> As I understand it - these socket solutions have a code the server
>>>> side and client side which ping traffic backwards and forwards and
>>>> keep a 'permanent' connection open - and the higher level libraries
>>>> can then write to the socket as if there was a stateful synchronous
>>>> connection.
>>>>
>>>> So to use one of these I would need to pick a particular client JS
>>>> library and then write my own handler to use on the socket in mochiweb
>>>> (or cut one out from one of the existing servers...)
>>>>
>>>> Has anyone done stuff on getting it into mochiweb?
>>>>
>>>> Gordon
>>>>
>>>>
>>>> On 17 July 2012 16:01, Gleb Peregud <gleber.p@REDACTED> wrote:
>>>>>
>>>>>
>>>>> On Tue, Jul 17, 2012 at 4:57 PM, Gordon Guthrie <gordon@REDACTED>
>>>>> wrote:
>>>>>>
>>>>>>
>>>>>> Folks
>>>>>>
>>>>>> I am building a softphone which needs to register with the server to
>>>>>> say
>>>>>> "I
>>>>>> am available" for incoming calls.
>>>>>>
>>>>>> So it makes an HTTP POST request to the server and that notifies the
>>>>>> softphone gen_srv that is is available.
>>>>>>
>>>>>> At that point I leave the TCP request hanging on a receive waiting for
>>>>>> a
>>>>>> notification that the socket has been torn down (and which point it
>>>>>> unregisters the phone).
>>>>>>
>>>>>> My question is: how long can I leave the request up? Infinity? or do I
>>>>>> need
>>>>>> to have a timeout/reregister cycle setup?
>>>>>
>>>>>
>>>>>
>>>>> You have to cycle it. Some proxies timeout connections after 30
>>>>> seconds, some after 45 some after 60. It is very tricky to get it
>>>>> right for all browsers and all platforms. Generally if you want a
>>>>> robust solution use something like SockJS or Socket.IO or Bullet.
>>>>
>>>>
>>>> _______________________________________________
>>>> erlang-questions mailing list
>>>> erlang-questions@REDACTED
>>>> http://erlang.org/mailman/listinfo/erlang-questions
>>>>
>>>
>>>
>>> --
>>> Loďc Hoguin
>>> Erlang Cowboy
>>> Nine Nines
>>> http://ninenines.eu
>>>
>>>
>
>
> --
> Loïc Hoguin
>
> Erlang Cowboy
> Nine Nines
> http://ninenines.eu
>
>



More information about the erlang-questions mailing list