broker.local # apt-get install mosquitto
broker.local # netstat -nap | grep mosquitto tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 1512/mosquitto tcp6 0 0 :::1883 :::* LISTEN 1512/mosquitto
# apt-get install mosquitto-clients
# mosquitto_sub -d -t hello/world Received CONNACK Received SUBACK Subscribed (mid: 1): 0
# mosquitto_pub -d -t hello/world -m "Hello World" Received CONNACK Sending PUBLISH (d0, q0, r0, m1, 'hello/world', ... (11 bytes))Sub 클라이언트는 "Hello World"를 전송 받는다.
# gem install mqtt지원하는 메시지 타입이다.
require 'rubygems'
require 'mqtt'
require 'readline'            
# nickname 설정    
nickname=ARGV[0]              
# localhost에서 테스트 했다.
mqtt = MQTT::Client.new('localhost')
mqtt.connect do |client|
    client.subscribe('chat/public')
    client.subscribe("chat/private/#{nickname}")
    enter_msg = "#{nickname} enter room!!"
    client.publish 'chat/public', enter_msg
    # Publish Thread
    Thread.new do
        while message = Readline.readline("", true)
            case message
            when /^\/priv\s*(\w*)\s*(.*)/       # 개인 메시지
                client.publish "chat/private/#{$1}", "<#{nickname}> : #{$2}"
            when /^\/quit\s*(.*)/               # 나가기 
                client.publish 'chat/public', "#{nickname} has quit (#{$1})"
                exit 1
            else                                # 공개 메시지
                client.publish 'chat/public', "#{nickname} : #{message}"
            end
        end
    end
    loop do
        topic, message = client.get    
        print message,"\n"
    end
end
| Mnemonic | Enumeration | Description | 
| Reserved | 0 | Reserved | 
| CONNECT | 1 | Client request to connect to Server | 
| CONNACK | 2 | Connect Acknowledgment | 
| PUBLISH | 3 | Publish message | 
| PUBACK | 4 | Publish Acknoledgment | 
| PUBREC | 5 | Publish Received (assured delivery part 1) | 
| PUBREL | 6 | Publish Received (assured delivery part 2) | 
| PUBCOMP | 7 | Publish Complete (assured delivery part 3) | 
| SUBSCRIBE | 8 | Client Subscribe request | 
| SUBACK | 9 | Subscribe Acknoledgment | 
| UNSUBSCRIBE | 10 | Unsubscribe Acknoledgment | 
| UNSUBACK | 11 | Unsubscribe Acknoledgment | 
| PINGREQ | 12 | PING Request | 
| PINGRESP | 13 | PING Response | 
| DISCONNECT | 14 | Client is Disconnecting | 
| Reserved | 15 | Reserved | 
| Bit position | Name | Description | 
| 3 | DUP | Duplicate delivery | 
| 2-1 | QoS | Quality of Service | 
| 0 | RETAIN | RETAIN flag | 
| QoS value | bit 2 | bit 1 | Description | ||
| 0 | 0 | 0 | 최대 한번 | Fire and Forget | <=1 | 
| 1 | 0 | 1 | 적어도 한번 | Acknowledged delivery | >=1 | 
| 2 | 1 | 0 | 정확히 한번 | Fire and Forget | <=1 | 
| 3 | 1 | 1 | 최대한번 | Fire and Forget | <=1 | 
| 4 | 1 | 1 | Reserved | ||