[jboss-dev-forums] [Design of JBossCache] - Re: Evolution of TcpDelegatingCacheLoaders/TcpCacheServers
akluge
do-not-reply at jboss.com
Fri Apr 10 15:31:07 EDT 2009
I've been busy, but hopefully I can come back to this project now. I have started to build a prototype with MINA. Mostly I am focusing on a JBC binary protocol, however, handling additional protocols should flow naturally using features built into MINA.
The primary access to the cache will be via a binary protocol. This provides for efficiency as well as extensibility.
A Prototypical JBoss Cache Request
Byte Description
Byte 0 (0x90) JBoss Cache Request Marker
-----------------------------------------------------------
Byte 1
Byte 2 A Java int containing the request type.
Byte 3
Byte 4
-------------------------------------------------------------
Byte 5
.
. Data specific to the request type.
.
Byte n
The Initial Byte
The initial byte marker serves two main purposes. First, it allows the parser to confirm that the currently read byte is the beginning of a JBoss cache binary request.
Secondly, a JBoss Cache MessageDecoder (A MINA MessageDecoder) can check the value of this byte in its decodable method and return true only if the byte matches the 0x90 JBoss Cache request marker.
If the JBoss Cache MessageDecoder is used within a DemuxingProtocolDecoder (another MINA class) along with, say, a memcached MessageDecoder, the server can identify the protocol used in each request by examining the lead byte, and invoke the appropriate message decoder.
Likely values for the first byte identifying the protocol.
Value Meaning
0x80 memcached binary request
0x81 memcached binary response
0x90 JBoss Cache binary request
0x91 JBoss Cache binary response
The Message Type
The next field is a java int written into four bytes of the message. This identifies the specific type of message. It is used in a RequestDecoder (another standard MINA class) class to select the appropriate builder for the request.
Data Specific to the Message Type
The builder reads the remainder of the input stream, and constructs a Request object, which will be passed in to the IoHandler where it will carry out the expected actions on the cache.
Right now, I am working through an implementation of a single test flow to be sure that the plumbing can generally work.
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4224947#4224947
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4224947
More information about the jboss-dev-forums
mailing list