Hi Rafael, Many thanks for that. I've been thinking that it was getting close to a good time to get it off the branch and into the main code base, so you've beaten me to it. I've actually made a bunch of improvements recently, but I was in the middle of some fairly subtle bug fixes that were caused by some quirks of the ws WebSocket library when Proton moved from subversion to git, so things rather built up a bit on my local copy whilst I procrastinated over my move to git :-) .
You doing this gave me a much needed nudge and I've just got myself set up to use git for Proton. This morning I've migrated all of my latest updates into git (see https://issues.apache.org/jira/browse/PROTON-760). I had a look in https://git-wip-us.apache.org/repos/asf?p=qpid-proton.git;h=39cd8c5 and it *looks* like my first git commit went OK =-O One of the improvements I've added is JavaScript ports of msgr-send and msgr-recv, which I added so I could do soak/performance tests, they work more or less like the C/Python versions, that is to say: ./msgr-recv.js -c 1000000 ./msgr-send.js -c 1000000 -b 64 would push one million 64 octet messages. There are a couple of features missing from the tests, but they are more or less there. It's probably a good time to remind people who might be reading this that one quirk of the JavaScript binding is that the network transport is WebSocket based *not* TCP sockets. This means that it won't "just work" with qpidd, the Java broker or the proton-c examples. I've provided a simple WebSocket->TCP proxy though and it also works fine with the Java Broker's WebSocket transport. I've mentioned this in the README, but people don't always read those..... https://git-wip-us.apache.org/repos/asf?p=qpid-proton.git;a=blob;f=proton-c/bindings/javascript/README It's on my TODO list to get emscripten's network library working with the Node.js net module and chrome packaged apps so that it'll be possible to use native TCP sockets where available, but I've just not had the time yet. I've included a JavaScript port of qpid-config for fun to illustrate how to do some slightly fancier asynchronous request/response stuff, it's actually a pretty complete port of qpid-config and it also works with the Java Broker if you install the QMF plugin that I wrote for that (OK, so I am a little bit OCD). The JavaScript binding is fairly well documented and you can generate jsdoc HTML docs via: make docs So far I've tried it out on Node.js and Firefox, but it should work on any modern(ish) browser that supports binary WebSockets and ArrayBuffers. Browser performance varies *a lot* I was originally trying it on FF 24 and I was a bit disappointed by the performance compared to Node.js but I upgraded my laptop the other week and I'm now running FF 33 which *totally rocks* the reason that FF 33 runs so well is that emscripten (the C->JavaScript compiler I used) generates asm.js, see http://asmjs.org/ and recent versions of FireFox are optimised for asm.js and can do neat things such as ahead of time compilation. As a heads up the JavaScript binding generates a node module called qpid-proton containing a library called proton.js, I'm likely to change that fairly soon to something like qpid-proton-messenger and qpid-proton-messenger.js the reason for that is that it is really a Messenger binding and with all the recent talk on the forums about alternative reactive APIs based on Proton Engine that ought to be a direction I should start looking into. Hopefully this is useful to people, it's been something of a labour of love over the last year. Cheers, Frase On 28/11/14 16:18, Rafael Schloming wrote:
Hi Everyone, I managed to take advantage of a bit of my thanksgiving downtime to give fadams' javascript branch some attention. I'm happy to report that thanks mostly to his excellent work, it was fairly straightforward to bring his branch up to date with respect to trunk. I've done this and pushed the result to a new branch called 'javascript'. I then added the javascript tests to the main build and merged the javascript branch into trunk. Most of you probably won't notice a difference since it is fairly self contained and won't build without emscripten, but I would highly encourage you to check it out. There is a little bit of a manual process to get emscripten installed, but it is well documented and straightforward, and once you've done that, it all seems to work quite smoothly. As always, please let me know if I broke anything. --Rafael
--------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
