cbaxter / infinitymq Goto Github PK
View Code? Open in Web Editor NEWA .NET Message Transport on Steroids
License: GNU Lesser General Public License v3.0
A .NET Message Transport on Steroids
License: GNU Lesser General Public License v3.0
Implement core message reader/writer infrastructure.
Requires:
MessageWriter currently adds a 'Type' header to all messages sent; eventually will need to support custom message headers.
Although ReceiveAsync tends to incur extra overhead due to context switching; coupled with a BlockingCollection may allow for FrameReader to continue to working while pulling off more data from socket connection.
I think this would add to the .NET-ness of the project and make consuming things easier.
It already has an API around subscribing and would fit perfectly into an app.
See:
http://msdn.microsoft.com/en-us/library/ee850490.aspx
http://msdn.microsoft.com/en-us/library/dd990377.aspx
http://blog.rjcox.co.uk/2010/01/10/iobservable-req/
MessageReader assumes a single type frame followed by one or more content flags without actually verifying FrameFlags.
MessageReader & MessageWriter are currently dependant on FrameReader & FrameWriter. For in process communication, serialization is not required and as such, in process versions of each class will be required.
Currently header frames are just a payload; no method currently exists for identifying a particular header frame .
InfinityMQ should support ZeroMQ Message Transport Protocol/1.1. The spec is listed as "Raw" (i.e., not stable), but it will likely become stable when zmq 3.1 is officially released in a few months.
This will allow IMQ apps to interact with anything built on ZMQ, which is a major advantage for heterogeneous deployment scenarios.
Intra-process communication doesn't need to use ZMTP, although it could. ZMTP will be most useful for inter-process and networked communication.
Allow for multiple bindings or connect calls on a single channel to various end points. Should be able to bind multiple endpoints such as TCP/IPC etc through a single channel. Should not be able to intermix bind and connect calls on same channel.
Sockets implement custom send that accepts collection of buffers; thus would no longer require Buffer.BlockCopy to build up single message buffer. Determine impact on performance and act accordingly.
Draft first version of public API.
Several options should be made to be configurable (defaulted) at the App.config/Web.config level.
Examples.
As raised in Issue #2; implement ZeroMQ Message Transport Protocol (ZMTP) Frames as described in http://rfc.zeromq.org/spec:15
We should pick an open source license for IMQ (∞MQ?).
Options:
ZeroMQ uses a modified LGPL that also allows static linking to proprietary code, but this doesn't really apply in .NET land.
MongoDB uses AGPL for the database itself and Apache for the drivers. 10gen also sells commercial licenses for the database for those who need to tweak but don't want to release their changes.
I'm leaning toward either LGPL or AGPL. What are your thoughts?
The current Type header format in MessageWriter
should be profiled and improved if possible/necessary.
The performance impact of using a versionless AQN may not matter with large messages, but it could become an issue for small messages, especially if a compact binary serializer is used (i.e., protobuf).
Required/desirable properties for Type encoding:
To facilitate maximum throughput, create buffered frame reader/writer classes.
Expected Results:
PUB/SUB Channel
Create basic console application to allow for measuring benchmarks of different InfinityMQ setups.
Currently using Uri class to specify endpoint; should validate that Uri is valid based on scheme.
NOTE: In case of TCP need to be able to handle DNS vs IP Address etc.
Implement buffer pool to prevent reallocation of byte arrays for temporary message buffers.
Due to each write on a named pipe being treated as a single message; don't want to write out frames individually (seriously degrades performance). Implement buffer pool to allow for more efficient memory management.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.