2017-11-21 12 views
1

Ich schreibe einen Server, der unter anderem ständig Daten in verschiedenen Multicast-Adressen senden muss. Die Pakete, die gesendet werden, können von einer Clientseite (einer App) empfangen werden, die zwischen den erwähnten Adressen wechselt.So implementieren Sie Multicast-Sockets in swift?

Ich benutze Perfect (https://github.com/PerfectlySoft/Perfect) zum Schreiben der Server-Seite, hatte jedoch kein Glück mit dem Perfect-Net-Modul noch mit CocoaAsyncSocket. Wie kann ich sowohl den Sender als auch den Empfänger mit swift implementieren? Irgendein Schnipsel wäre wirklich nützlich.

Ich habe gelesen über Multicasting und wenn es um den Empfänger geht, habe ich festgestellt, dass in den meisten Sprachen (dh Java oder C#) der Empfänger oft eine Port-Nummer und eine Multicast-IP-Adresse angibt, aber wann ist die Verbindung mit dem Server hergestellt wird? Wann bindet der Socket an die reale Server-IP-Adresse?

Vielen Dank im Voraus

Antwort

1

Wenn wir über die TCP/IP-Stack zu sprechen, nur IP und UDP-Broadcasts und Multicasts. Sie sind beide verbindungslos und deshalb sehen Sie nur das Senden und Empfangen an spezielle Multicast-Adressen, aber keine Bindungen und Verbindungen. Sie sehen es in verschiedenen Sprachen, weil (a) Protokolle sprachunabhängig sind und (b) die meisten Implementierungen angemessene Anstrengungen unternehmen, um zu versuchen, mit der BSD-Socket-Schnittstelle kompatibel zu sein.

Wenn Sie dieses echte Multicast wollen, müssen Sie eine schnelle Implementierung von Sockets finden, die Einstellungsoptionen erlauben. Übliche Namen für diese Operation sind setsockopt. Die Multicast-Senderseite braucht nichts weiter als einen einfachen UDP-Socket (ich empfehle UDP, nicht IP), während der Absender needs to be added to a multicast group. Diese Python example beschreibt es ziemlich genau.

Es ist jedoch erwähnenswert, dass Router Broadcasts und Multicasts nicht routen. Daher können Sie es nicht über das Internet verwenden. Wenn Sie Internet in Ihrem Projekt verwenden müssen, rate ich Ihnen, TCP - oder Websockets zu verwenden, wenn Ihre Clients Browser sind - und Nachrichten an "Gruppen" von ihnen manuell zu senden.

1

Ich glaube, Sie wollen Perfect-Kafka oder Perfect-Mosquitto - Message Queue, die es einem Server ermöglicht, Livestreams an die clientseitigen Abonnenten zu veröffentlichen. Low-Level-Sockets erfüllen Ihre Anforderungen nicht so leicht.