TsgcWSPServer_sgc › 속성 › UseMatchesMask
채널 이름을 정확한 문자열 일치 대신 마스크 스타일로 일치시킬 수 있게 합니다.
property UseMatchesMask: Boolean read FUseMatchesMask write FUseMatchesMask;
False
UseMatchesMask는 런타임 전용 속성으로, Object Inspector에 게시되지 않으므로 코드에서만 설정할 수 있습니다. 이 속성은 published가 아니라 public입니다.
기본적으로 채널 인수(Subscribe, Broadcast, Publish 등)는 정확한 문자열 비교를 통해 연결의 구독과 일치됩니다. UseMatchesMask가 True이면, 서버는 대신 채널 인수를 Delphi 마스크(System.Masks.MatchesMask: * 및 ? 와일드카드, 그리고 [abc]와 같은 문자 집합)로 확장하여 현재 하나 이상의 활성 구독자가 있는 채널 이름 집합과 비교합니다. 마스크가 활성 채널과 일치하지 않으면 해당 인수는 리터럴 채널 이름으로 사용됩니다.
UseMatchesMask는 MQTT 토픽 필터 일치가 아닙니다. #과 +는 특별한 의미를 가지지 않으며, *는 다른 문자와 마찬가지로 /도 포함하여 일치하므로 경로 세그먼트 개념이 없습니다. MQTT 호환 와일드카드가 필요하면 대신 TsgcWSPClient_MQTT / TsgcWSPServer_MQTT를 사용하십시오.
이 옵션은 현재 패턴과 일치하는 모든 채널에 메시지를 팬아웃하는 게시(publish) 측에서 가장 유용합니다:
oProtocol.Broadcast('payload', 'topic1/*');
구독(subscribe) 측에서는 유용성이 제한적입니다. 구체적인 topic1/... 채널에 구독자가 생기기 전에 Subscribe('topic1/*')를 보낸 클라이언트는 마스크가 확장할 대상이 아직 없으므로 단순히 리터럴 채널 이름 topic1/*에 구독됩니다.
// server side, enable mask matching for this protocol instance
sgcWSPServer_sgc1.UseMatchesMask := True;
// clients subscribe to concrete channel names
// sgcWSPClient_sgc1.Subscribe('topic1/a');
// sgcWSPClient_sgc2.Subscribe('topic1/b');
// publish once, delivered to every live channel matching the mask
sgcWSPServer_sgc1.Broadcast('payload', 'topic1/*');