| Qpid Proton JavaScript Language Bindings TODO List |
| ================================================== |
| |
| Network code is currently limited to a WebSocket transport, including for Node.js |
| It would be good to allow a configurable transport so that Node.js and Chrome |
| packaged apps could use native TCP sockets. |
| |
| The JavaScript binding is pure JavaScript, which has been trans-compiled from C |
| to JavaScript using emscripten. This allows the same code to be used in a browser |
| and Node.js, but it potentially has a performance penalty in Node.js. An alternative |
| for Node.js might be to build a SWIG binding (recent versions of SWIG support |
| JavaScript). This should be viewed as a complementary not competing approach as |
| it would only work for environments like Node.js and definitely *not* browser |
| environments, which clearly require pure JavaScript. |
| |
| Optimisation are enabled for compiling and linking but there hasn't been any |
| profiling done yet. The binding code *shouldn't* be the bottleneck but it's |
| always possible that I messed up. |
| |
| Error handling is nowhere near as good as it should be, though this is mostly |
| because Messenger itself is a bit lacking on the error handling/recovery front. |
| |
| Although described as "Proton" this is currently a JavaScript binding for Messenger |
| and associated Message & Data classes. There has been some talk on the user list |
| of an alternative reactive API based on proton Engine. This might ultimately be |
| a better fit for JavaScript but it is very much in its infancy and I haven't |
| really looked at it yet. |
| |
| proton-j seems to use hawt-dispatch, which is modelled after Grand Central |
| Dispatch so I need to work out what it's using it do do and whether there are |
| parallels in proton-c |
| |
| Although the WebSocket transport uses the sub-protocol 'AMQPWSB10' as specified |
| in http://docs.oasis-open.org/amqp-bindmap/amqp-wsb/v1.0/amqp-wsb-v1.0.html |
| section 2.1 it is not technically compliant with the spec. as the AMQP data is |
| created by the proton-c code, which produces a data-stream for the TCP transport |
| whereas the WebSocket spec. seems to want to make use of the fact that WebSocket |
| is a frame based transport (whereas TCP is not). This is quite hard to resolve |
| as the binding simply sends the contents of the octet buffer created by proton |
| over the transport and thus to make this binding compliant with the spec. would |
| require a change to the underlying proton-c code! It is possible that this may be |
| done in future as SCTP support would require the ability to push AMQP frames too. |
| In the mean time fortunately the Java Broker WebSocket transport is actually |
| tolerant of this off-spec. behaviour. My personal view is that both approaches |
| should be valid and in particular using the standard TCP framing means that it |
| is straightforward to create WebSocket<->TCP proxies, which is useful given that |
| only the Java Broker currently has a native WebSocket transport. |
| |
| |