2014-07-21 5 views
0

faye (배포판에 포함 된 채팅 예제)를 사용하여 개념 증명 (chat-proof) 개념을 작성하려고합니다.faye ruby ​​서버를 사용하여 가입 응답에 사용자 정의 필드 추가

개념 증명에서 클라이언트가 채널을 구독 할 때 채팅 채널의 전체 내역을 보내려고합니다. 내 생각은 구독 응답 메시지에서 사용자 지정 필드를 사용하여 구현하는 것이 었습니다.

bayeux protocol definition을 확인한 후 가입 응답 메시지에 'ext'필드가 허용됩니다.

그러나 서버 확장을 사용하여이 확장 필드에 아무 것도 추가 할 수 없습니다.

class ServerLog 
    def incoming(message, callback) 
    puts " msg: #{message}" 
    unless message['channel'] == '/meta/subscribe' 
     return callback.call(message) 
    end 

    # the following line changes absolutely nothing 
    message['ext'] = 'foo' 

    callback.call(message) 
    end 
end 

App.add_extension(ServerLog.new) 

ext 필드를 설정해도 서버가 손상되지는 않지만 가입 응답 메시지에는 아무런 영향이 없습니다. 심지어는 Wireshark를 사용하여 검사했습니다 (js 클라이언트가 일부 필드를 무시하지 않도록).

답변

0

내 실수는 '나가는'방법이고 '나가는'방법을 사용하지 않았습니다. (채널 /chat/specialchannel 경우)

class ServerLog 
    def outgoing(message, callback) 
    puts " out: #{message}#" 
    unless message['channel'] == '/meta/subscribe' 
     return callback.call(message) 
    end 

    if message['subscription'] == '/chat/specialchannel' 
     message['ext'] ||= {} 
     message['ext']['specialattribute'] = 'special value' 
    end 

    callback.call(message) 

    end 
end 

App.add_extension(ServerLog.new) 

예는 가입 응답 메시지의 필드에 extspecialattribute를 추가 할 것이다.