wsky / top-push

Message-push abstraction component, provide useful messaging components.
8 stars 4 forks source link

about push server message protocol, a forward-broker #13

Closed wsky closed 11 years ago

wsky commented 11 years ago

first version https://github.com/wsky/top-push/commit/601db7b92061555141508dbddb8fcf6896b49283

    /*
     * 1byte MessageType, or extend to 8bit usage, 
     *      DUP Flag, 
     *      Body Formatter, 
     *      RETAIN
     * 
     * 8byte from(receiving)/to(sending) id, support front<-->forward<-->back.
     * 
     * 4byte remainingLength int32, do not need support longer message.
     * 
     * ...   body/content, maybe serialized by json/protobuf/msgpack/...
     * 
     * body example, just resolve/parse by client:
     * - publish message:
     *      { MessageId:"20121221000000001", Content:"hello world!" }       
     * - confirm message:
     *      ["20121221000000001", "20121221000000002"]
     */

    // server send: server -> client, write "from"
    // server receive: server <- client, read "to"

    // client send: client -> server, write "to"
    // client receive: client <- server, read "from"

MQTT is referred. http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html

MessageType

https://github.com/wsky/top-push/blob/master/src/main/java/com/tmall/top/push/messages/MessageType.java

public class MessageType {
    // http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#msg-format
    // like MQTT
    // CONNECT,
    // CONNACK,
    // DISCONNECT,
    // SUBSCRIBE,
    // SUBACK,
    // UNSUBSCRIBE,
    // UNSUBACK,
    // PINGREQ,
    // PINGRESP,

    // publish message
    // publisher->server
    // server->subscriber
    public final static int PUBLISH = 1;
    // one pub, one acknowledge
    // public final static int PUBACK = 2;
    // PUBACK,
    // batch pub and batch confirm
    public final static int PUBCONFIRM = 2;
}

Message Base

https://github.com/wsky/top-push/blob/master/src/main/java/com/tmall/top/push/messages/Message.java

public abstract class Message {
    public int messageType;

    public int remainingLength;

    public String from;

    public String to;
}
wsky commented 11 years ago

about Message Body Formatter

JSON

string encoding:

wsky commented 11 years ago

add full MQTT support

wsky commented 11 years ago

16

about mqtt support and abstract for it

wsky commented 11 years ago

MessageType is field of base protocl, just use by client

new protocol https://github.com/wsky/top-push/tree/master/src/main/protocol/

base protocol is forward protocol, but not routerable currently

/*
     * 1byte MessageType, or extend to 8bit usage, DUP Flag, Body Formatter,
     * RETAIN
     * 
     * 8byte from(receiving)/to(sending) id, support front<-->forward<-->back.
     * 
     * 1byte Message body format flag
     * 
     * 4byte remainingLength int32, do not need support longer message.
     * 
     * ... body/content, maybe serialized by json/protobuf/msgpack/...
     * 
     * body example, just resolve/parse by client: - publish message: {
     * MessageId:"20121221000000001", Content:"hello world!" } - confirm
     * message: ["20121221000000001", "20121221000000002"]
     */

    // server send: server -> client, write "from"
    // server receive: server <- client, read "to"

    // client send: client -> server, write "to"
    // client receive: client <- server, read "from"

base protocol via mqtt

/*
     * 
     * 1byte Fixed Header:
     * 
     * MessageType/DUP/QOS/RETAIN RETAIN
     * 
     * 1-4byte Remaining length, max 256 MB
     * 
     * 
     * PUBLISH
     * 
     * Variable Header: Topic Name/QoS level/Message ID
     * 
     * Payload:position=Fix-Header.length+Variable-Header.length
     * 
     * 1byte MessageType 8byte from(receiving)/to(sending) id, support
     * front<-->forward<-->back.
     * 
     * 
     * [X]PUBACK:
     * 
     * Variable Header: Message ID
     */

    // payload act forward(MessageIO)

    // server send: server -> client, write "from"
    // server receive: server <- client, read "to"

    // client send: client -> server, write "to"
    // client receive: client <- server, read "from"

publish-confirm just a special usage by client, like https://github.com/wsky/top-push-integration

wsky commented 11 years ago

8byte from(receiving)/to(sending) id, support front<-->forward<-->back.

8 is not fit,

->

1byte identity bytes count identity bytes

wsky commented 11 years ago

27