I use dnode through shoe(sockjs): https://github.com/substack/dnode
With this I get the best of both worlds: support for event listeners (you
can pass callbacks) *and* RPC (like getUserData) - in a single package.
On Monday, September 23, 2013 6:28:52 PM UTC+2, André Eife wrote:
>
> At the moment I'm developing a large web application heavily relying on
> websockets and socket.io basically for all server communication. During
> developement I discovered some problemes and developed a little library as
> an approach for a common solution. So I would like to share my thoughts and
> hear your opinion on it.
>
> First the main problems I discovered using websockets:
>
> 1. consistent naming of messages on client and server
> When using REST you get an error message when requesting a wrong or non
> existing URL from the server. With socket.io if you mistype a message it
> is just ignored by the other side without any error indicating this.
>
> 2. managing listeners
> In a big web application with lots of seperate modules and lots of
> communication it's quite hard to handle all the listeners. Multiple modules
> can each open a listener for the same message but you have to be carefull
> to not open a listener again for the same functionality which is already
> open. Otherwise the same code is excecuted multiple times when receiving
> the message and this may result in potential errors which can be hard to
> debug.
>
> 3. no wildcards and problems with simultaneous messages
> So for example each module requests some data for a different user from
> the server. There is a message like "getUserData" so this can be requested
> from the server and is listened once for the answer. If this happens for
> multiple modules at the same time, the first answer for this message will
> be processed by all modules (and thats why some get the wrong data) and all
> following answers will be ignored because of the once-listeners.
>
>
> So I thought about it and tried the following solution:
> You no longer use strings for messages but just define the required
> message api as a JSON like this:
> {
> user: {
> info: {
> on: {
> attach: 'username'
> },
> emit: {}
> }
> }
> }
>
> This is translated by the library into an object including all the needed
> socket.io functionality. Instead of using *io.socket.on('userInfo',
> callback);* you use *socketapi.user.info.on(callback)*. On the server the
> object is also used and so you can't mistype messages or listen for non
> existing messages.
>
> When generating the usable api object from the JSON file there are also
> multiple helper functions included trying to solve some problems. For
> example after declaring the listener you can use chaining and call a
> function *onRoute()* instantly so the listener is only valid while the
> route of the web app has not changed. The function *whileLoggedIn()*closes
> the listener when the user logs out. Otherwise an object containing
> functions to stop and resume the listener at any time is returned.
>
> Also there is some wildcard support. So for example in the
> example above the "attach" attribute in the inner object declares that a
> wildcard is attached to the message. So you actually use it like
> *socketapi.user.info.on('someUsername',
> callback);*. The library attaches the username to the message and the
> server recognizes it because it uses the same object.
>
>
> There are other things to it but the main intention of this post is that I
> wanted to share my thoughts and my approach of a solution. It helped me a
> lot during my current project and solved a lot of problems for me but I
> really would like to hear your opinion on this.
>
>
--
--
Job Board: http://jobs.nodejs.org/
Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.