WebSocket Publisher
Der WebSocket Publisher empfängt Nachrichten über TCP von einem von WebSocket unterstützten Client und veröffentlicht sie in FME Flow-Themen. Unterstützte Clients umfassen den Transformer WebSocketSender sowie die folgenden Java- oder HTML5-Webbrowser:
- Internet Explorer 10+
- Firefox 11+
- Chrome 16+
- Safari 6+
- Opera 12.10+
WebSocket-Kommunikationskanäle
Der WebSocket Server befindet sich auf dem FME Flow Core. Standardmäßig verwendet FME Flow die folgenden Kanäle für die WebSocket-Kommunikation:
- Port: 7078
- URI: ws://<hostname>:7078/websocket
Informationen zum Konfigurieren des WebSocket-Servers für die SSL-Kommunikation finden Sie unter Konfigurieren für HTTPS.
Konfigurieren des Publishers
- Wählen Sie in der FME Flow-Web-Benutzeroberfläche die Option Benachrichtigungen > Publikationen und klicken Sie auf Neu.
- Geben Sie einen Namen für die Publikation an.
- Wählen Sie im Dropdown-Menü "Protokoll" die Option "WebSocket" aus.
-
Legen Sie die Themen fest, für die Sie die Publikation vornehmen wollen, indem Sie den Dropdown-Selektor verwenden. Um ein Thema zu erstellen, das Sie direkt verwenden können, klicken Sie auf +.
- Ziel-URL: In dieses Feld wird die URL des WebSocket-Servers auf dem FME Flow Core (in Ihrer FME Flow-Installation enthalten) eingetragen. Sie können jedoch auch eine Verbindung zu einem anderen WebSocket-Server herstellen.
- Stream-ID: Geben Sie die Stream-ID für die Publikation an. Die Stream-ID ermöglicht dem WebSocket-Server, Nachrichten zu identifizieren und sie mit anfragenden Anwendungen zu verbinden. In diesem Fall handelt es sich bei der anfragenden Anwendung um den Notification Service Publisher.
- Klicken Sie auf OK.
Nachrichtenprotokoll

Der WebSocket-Server muss Nachrichten vor dem Senden öffnen. Um Nachrichten zu öffnen, wird das folgende Schema verwendet:
{
"ws_op" : "open",
"ws_stream_ids" : ["<streamid1>", "<streamid2>", "<streamid3>", ...]
}
Sobald eine Nachricht geöffnet ist, wird eine Verbindung hergestellt, die die Stream ID zum Identifizieren der Nachricht verwendet. Der WebSocket-Server leitet Nachrichten unter Verwendung dieses Schemas weiter:
{
"ws_op" : "send",
"ws_msg" : "msg"
}
Der WebSocket-Server unterstützt das Senden mehrerer Nachrichten nach dem Öffnen eines Streams.
Nach dem Senden von Nachrichten empfiehlt es sich, dass der WebSocket-Server den Nachrichten-Stream schließt. Wenn eine Nachricht jedoch nicht explizit geschlossen wird, schließt der WebSocket-Server sie automatisch.
{
"ws_op": "close"
}
Attribute:
- ws_op: Definiert die WebSocket-Operation. Wenn der WebSocket-Server Nachrichten öffnen soll, geben Sie "open" an. Um Nachrichten zu senden, geben Sie "send" an. Um einen Nachrichten-Stream zu schließen, geben Sie "close" an.
- ws_stream_ids: Identifiziert einen oder mehrere Nachrichten-Sreams, damit der WebSocket-Server sie der Quelle zuordnen kann.
Betrachten Sie beispielsweise die folgende Nachrichtenserie von einem HTML5-Client an Ihren WebSocket-Server:
{
"ws_op" : "open",
"ws_stream_ids" : "send-stream",
}
{
"ws_op" : "send",
"ws_msg" : "Hello World"
}
{
"ws_op" : "close"
}
Nachdem der WebSocket-Server den Nachrichtenstrom "send stream" geöffnet hat, wird er an alle in diesem Stream erstellten Publisher gesendet. Die Nachricht "Hello World" wird dann an alle für diese Publisher definierten Themen übermittelt. Der WebSocket-Server schließt dann den Stream.

Sie können Nachrichten mit Informationen zu allen derzeit auf dem FME Flow WebSocket-Server geöffneten Kanälen senden. Diese Informationen können zur Verwaltung und Fehlerbehebung von WebSocket-Kommunikationen hilfreich sein.
Um die Anzahl der geöffneten WebSocket-Kanäle nach Stream ID zu ermitteln
{
"ws_op" : "admin",
"ws_msg" : "getnumchannels()"
}
Entsprechendes Antwortobjekt:
{
"numchannels" : "<number_of_channels>",
"streams":[
{
"stream" : "message_stream_id",
"numchannels" : "<number_of_channels_open_on_this_stream>"
},
<...>
{
]
}
Um Verbindungsinformationen zu jedem geöffneten WebSocket-Kanal zu erhalten
{
"ws_op" : "admin",
"ws_msg" : "getchannelinfo()"
}
Entsprechendes Antwortobjekt:
{
"numchannels" : "<number_of_channels>",
"channels" :[
{
"port" : "<channel_port_number>",
"stream" : "message_stream_id",
"host" : "channel_host_ip_address",
"writable" : "<channel_is_writable_true_or_false>"
},
<...>
{
]
}