MessageWebSocketControl MessageWebSocketControl MessageWebSocketControl MessageWebSocketControl Klassendeklaration Die MessageWebSocketControl-Klasse bietet Zugriff auf erweiterte Socket-Steuerdaten in einem MessageWebSocket-Objekt. Ein MessageWebSocketControl-Objekt wird automatisch mit dem übergeordneten MessageWebSocket-Objekt erstellt. Die Control-Eigenschaft bietet Zugriff auf das zugehörige MessageWebSocket-Objekt. Die Eigenschaft SupportedProtocols erhält den Wert dieser Eigenschaft und kann jederzeit aufgerufen werden. Die MessageType-Eigenschaft kann jederzeit geändert werden, bevor oder nachdem das MessageWebSocket verbunden ist. Damit kann eine App zwischen Binär - und UTF-8-Meldungen wechseln. Die OutboundBufferSizeInBytes-Eigenschaft muss gesetzt sein, bevor das MessageWebSocket verbunden ist. Das Setzen dieser Eigenschaft, nachdem das MessageWebSocket verbunden ist, hat keine Wirkung. Alle Änderungen an den anderen Eigenschaftswerten auf dem MessageWebSocketControl müssen gesetzt werden, bevor das DatagramSocket gebunden oder verbunden ist. Infolgedessen müssen Sie Änderungen an der MaxMessageSize vornehmen. ProxyCredential. OutboundBufferSizeInBytes. Oder ServerCredential-Eigenschaften, dann müssen diese Änderungen vor einem erfolgreichen Aufruf der ConnectAsync (Windows. Foundation. Uri) - Methode auf dem MessageWebSocket erfolgen. Im folgenden Beispiel wird ein MessageWebSocket erstellt. Und zeigt dann, wie die MessageType-Eigenschaft auf Binär gesetzt wird. (Andere Eigenschaften können in ähnlicher Weise eingestellt werden.) Danach kann die App das MessageWebSocket verbinden. Eigenschaften-Zusammenfassung Ruft eine Liste der ignorierbaren Server-Zertifikatfehler ab. Holen Sie sich diese Liste und fügen Sie ChainValidationResult-Werte für Serverzertifikatfehler hinzu, die Sie während des Secure WebSocket (wss: protocol) Server-Zertifikat-Validierungsprozesses ignorieren möchten. Eigenschaftswert Eine Liste der ChainValidationResult-Werte, die die Serverzertifikatfehler anzeigen, die bei der Validierung von Serverzertifikaten ignoriert werden sollen. Standardmäßig ist die Liste leer und alle Fehler bewirken, dass die Validierung fehlschlägt. Im folgenden Beispiel wird veranschaulicht, wie Sie den ChainValidationResult-Fehler ignorieren, wenn Sie eine Verbindung zu einem Server herstellen, der ein selbst signiertes Zertifikat verwendet. Der Code fügt der IgnorableServerCertificateErrors-Liste den entsprechenden Wert hinzu, bevor er ConnectAsync (Windows. Foundation. Uri) auf dem Web-Socket aufruft. Das selbstsignierte Zertifikat des Server39s wird nicht dazu führen, dass die Validierung fehlschlägt, aber andere Fehler bei der Validierung des Serverzertifikats würden immer noch dazu führen, dass ConnectAsync (Windows. Foundation. Uri) fehlschlägt. Eigenschaftswert Eine Auflistung, die die vom MessageWebSocket-Objekt unterstützten WebSocket-Unterprotokolle enthält. Die SupportedProtocols-Eigenschaft enthält eine Sammlung von WebSocket-Subprotokollen, die vom MessageWebSocket-Objekt unterstützt werden. Vor dem Aufruf der ConnectAsync (Windows. Foundation. Uri) - Methode können zusätzliche unterstützte Sub-Protokoll-Strings zu dieser Auflistung hinzugefügt werden, die im WebSocket-Protocolquot-Header während des WebSocket-Handshakes an den Server gesendet werden. Das von dem WebSocket-Server gewählte, gegenseitig unterstützte Unterprotokoll wird dann auf der Protocol-Eigenschaft belichtet. Ein Versuch, ein Subprotokoll zu dieser Auflistung nach einem erfolgreichen Aufruf der ConnectAsync (Windows. Foundation. Uri) - Methode hinzuzufügen, wird nicht zu einem Fehler führen, aber der neue Wert wird ignoriert. Wenn jedoch der ConnectAsync (Windows. Foundation. Uri) - Methodenaufruf oder die Verbindungsoperation mit einem Fehler abgeschlossen ist, kann eine App die in der SupportedProtocols-Eigenschaft gespeicherte Sammlung aktualisieren und den Verbindungsaufruf von ConnectAsync (Windows. Foundation. Uri) und den neuen erneut versuchen Wert wird angewendet. Gerätefamilie Windows 10 (eingeführt v10.0.10240.0) API-Vertrag Windows. Foundation. UniversalApiContract (eingeführt v1) AttributePressemitteilung SEC warnt Investoren Über Binäre Optionen und Gebühren Zypern-basierte Unternehmen mit dem Verkaufen sie illegal in den USA FÜR IMMEDIATE RELEASE 2013-103 Washington , DC 6. Juni 2013 mdash Die Securities and Exchange Commission warnte heute Anleger über die potenziellen Risiken der Investition in binäre Optionen und hat ein zypriotisches Unternehmen mit dem Verkauf von illegal an US-Investoren aufgeladen. Bei den binären Optionen handelt es sich um Wertpapiere in Form von Optionskontrakten, deren Auszahlung davon abhängt, ob der zugrunde liegende Vermögenswert - zum Beispiel eine Aktien des Unternehmens - steigt oder sinkt. In solch einer all-oder nichts Auszahlungsstruktur, Investoren Wetten auf eine Aktienkurserhöhung Gesicht zwei mögliche Ergebnisse, wenn der Vertrag abläuft: Sie erhalten entweder eine vorgegebene Menge an Geld, wenn der Wert des Vermögenswertes über den festen Zeitraum erhöht oder nein Geld überhaupt, wenn es sank. Die SEC behauptet, dass Banc de Binary Ltd. Binäroptionen an Investoren in den USA angeboten und verkauft hat, ohne die Wertpapiere, wie sie im Rahmen der Bundesgesetzgebung vorgeschrieben sind, zu registrieren. Das Unternehmen hat weitgehend U. S-Kunden durch Werbung über YouTube-Videos, Spam-E-Mails und andere Internet-basierte Werbung angefordert. Banc de Binary Vertreter haben mit Investoren direkt per Telefon, E-Mail und Instant Messenger Chats kommuniziert. Banc de Binary hat auch als Broker beim Angebot und Verkauf dieser Wertpapiere gehandelt, aber nicht mit der SEC als Makler registriert, wie es im US-amerikanischen Gesetz erforderlich ist. Die SEC und die Commodity Futures Trading Commission (CFTC) haben heute einen gemeinsamen Investor Alert veröffentlicht, um Investoren über betrügerische Promotion-Systeme mit binären Optionen und binären Optionen Trading-Plattformen zu warnen. Ein Großteil des Binäroptionsmarktes betreibt über internetbasierte Handelsplattformen, die nicht zwangsläufig den anwendbaren US-amerikanischen Regulierungsanforderungen entsprechen und illegale Aktivitäten ausüben können. Gerade weil ausländische Unternehmen leichter mit amerikanischen Investoren kommunizieren können, bedeutet das nicht, dass sie unsere langjährigen Gesetze, die die Anleger schützen, durch die Registrierung von Wertpapieren beschützen sollten, sagte Andrew J. Ceresney, Co-Direktor der SECs Division of Enforcement. Banc de Binary kontaktierte U. S. Investoren über das Internet und YouTube aber völlig ignoriert die US-Wertpapiergesetze Registrierung Anforderungen. Wir werden dieses Verhalten konsequent bekämpfen, egal woher es kommt. Nach der Beschwerde der SEC gegen Banc de Binary, die im Bundesgericht in Nevada eingereicht wurde, begann das Unternehmen, Binäroptionen an US-Investoren im Jahr 2010 anzubieten und zu verkaufen. Banc de Binary veranlasste Investoren, Konten mit der Firma zu erstellen, Geld in diese Konten einzahlen und dann Kauf von binären Optionen, deren zugrunde liegende Vermögenswerte Aktien - und Aktienindizes enthalten. Banc de Binarys Aufforderung von U. S. Investoren war sehr erfolgreich und zog einige Kunden mit sehr bescheidenen Mitteln an. Zum Beispiel hatte ein Investor ein monatliches Einkommen von 300 und einen Nettovermögen von weniger als 25.000, und ein anderer Kunde wurde ermutigt, zusätzliche Mittel in sein Banc de Binary Handelskonto einzahlen, auch nachdem er den Banc de Binary-Vertreter mitgeteilt hatte, dass er arbeitslos war Weniger als 1.000 in seinem Girokonto. Die SEC-Beschwerde sucht Ablehnung plus Vorurteil Zinsen, finanzielle Sanktionen und vorläufige und dauerhafte Unterlassungsansprüche gegen Banc de Binary unter anderem Erleichterung. Die CFTC hat heute eine Parallelaktion gegen Banc de Binary angekündigt. Die SEC-Untersuchung wurde von Leslie A. Hakala und C. Dabney ORiordan des Los Angeles Regional Office durchgeführt. Die SECs werden von John W. Berry und Frau Hakala geführt. Die SEC schätzt die Unterstützung der CFTC in dieser Angelegenheit. Der Investor Alert auf binäre Optionen wurde gemeinsam von der SECs Office of Investor Education und Advocacy und der CFTCs Office of Consumer Outreach ausgestellt. Das Bulletin erörtert im Detail die potenziellen Risiken der Investition in binäre Optionen und warnt Investoren, dass sie nicht die volle Sicherung der föderalen Wertpapiere und Rohstoffgesetze haben, wenn sie unregistrierte binäre Optionen kaufen, die nicht der Aufsicht der US-Regulierungsbehörden unterliegen. Anleger sollten sich bewusst sein, das Potenzial für Betrug in diesem Bereich sowie der Realität, dass sie ihre gesamte Investition verlieren können, sagte Lori Schock, Direktor der SECs Office of Investor Education und Advocacy. Wir ermutigen die Anleger, den Hintergrund von Brokern und Beratern und Handelsplattformen zu überprüfen, bevor sie eine Investitionsentscheidung treffen. Wenn die Anleger keine einfachen Hintergrundinformationen erhalten können, z. B. ob der Finanzfachmann bei der SEC oder der FINRA registriert ist, dann sollten sie äußerst vorsichtig sein. Verwandte MaterialienKapitel 17. WebSocket WebSocket ermöglicht bidirektionales, nachrichtenorientiertes Streaming von Text - und Binärdaten zwischen Client und Server. Es ist die nächstgelegene API zu einer Rohnetzsteckdose im Browser. Außer einer WebSocket-Verbindung ist auch viel mehr als ein Netzwerk-Socket, da der Browser alle Komplexität hinter einer einfachen API abstrakt und eine Reihe von zusätzlichen Diensten bietet: Verbindungsverhandlung und gleiche Herkunftspolitik Durchsetzung Interoperabilität mit vorhandener HTTP-Infrastruktur Meldungsorientierte Kommunikation und Effiziente Message Framing Subprotocol Verhandlung und Erweiterbarkeit WebSocket ist einer der vielseitigsten und flexibelsten Transporte im Browser. Die einfache und minimale API ermöglicht es uns, beliebige Anwendungsprotokolle zwischen Client und Serveranything von einfachen JSON-Payloads zu benutzerdefinierten Binär-Message-Formaten in einer Streaming-Mode zu platzieren und zu liefern, wobei jede Seite jederzeit Daten senden kann. Allerdings ist der Kompromiss mit benutzerdefinierten Protokollen, dass sie, gut, benutzerdefinierte sind. Die Anwendung muss für fehlende Zustandsverwaltung, Komprimierung, Zwischenspeicherung und andere Dienste, die sonst vom Browser bereitgestellt werden, berücksichtigen. Es gibt immer Design-Einschränkungen und Performance-Kompromisse, und die Nutzung von WebSocket ist keine Ausnahme. Kurz gesagt, WebSocket ist kein Ersatz für HTTP, XHR oder SSE, und für die beste Leistung ist es entscheidend, dass wir die Stärken jedes Transports nutzen. WebSocket ist ein Satz von mehreren Standards: Die WebSocket API wird durch das W3C definiert und das WebSocket-Protokoll (RFC 6455) und seine Erweiterungen werden von der HyBi Working Group (IETF) definiert. WebSocket API Die vom Browser bereitgestellte WebSocket API ist bemerkenswert klein und einfach. Wieder einmal werden alle Low-Level-Details des Verbindungsmanagements und der Nachrichtenverarbeitung vom Browser übernommen. Um eine neue Verbindung zu initiieren, benötigen wir die URL einer WebSocket-Ressource und ein paar Anwendungs-Callbacks: Sende den Blob-Inhalt als binäre Payload Die WebSocket-API akzeptiert ein DOMString-Objekt, das als UTF-8 auf dem Draht oder einem von ArrayBuffer codiert ist , ArrayBufferView oder Blob-Objekte für binäre Transfers. Beachten Sie jedoch, dass die letztgenannten Binäroptionen einfach eine API-Bequemlichkeit sind: Auf dem Draht wird ein WebSocket-Frame entweder als Binär oder Text über ein einziges Bit markiert. Wenn also die Anwendung oder der Server andere Content-Type-Informationen über die Payload benötigen, dann müssen sie einen zusätzlichen Mechanismus verwenden, um diese Daten zu kommunizieren. Die send () - Methode ist asynchron: die bereitgestellten Daten werden vom Client in die Warteschlange gestellt und die Funktion wird sofort zurückgegeben. Als Ergebnis, vor allem bei der Übertragung von großen Nutzlasten, nicht die schnelle Rückkehr für ein Signal, dass die Daten gesendet wurde Um zu vermeiden, die Menge an Daten in der Warteschlange durch den Browser, kann die Anwendung das gepufferteAmount-Attribut auf dem Socket abfragen: Senden Sie die nächste Aktualisieren, wenn der Puffer leer ist Das vorhergehende Beispiel versucht, Anwendungsaktualisierungen an den Server zu senden, aber nur, wenn die vorherigen Nachrichten vom Client-Puffer abgeleitet wurden. Warum mit solchen Kontrollen belasten Alle WebSocket-Nachrichten werden in der exakten Reihenfolge ausgeliefert, in der sie vom Kunden in die Warteschlange gestellt werden. Infolgedessen verzögert ein großer Rückstand von Warteschlangennachrichten oder sogar eine einzige große Nachricht die Zustellung von Nachrichten, die hinter der Kopfzeile blockiert werden. Um dieses Problem zu umgehen, kann die Anwendung große Nachrichten in kleinere Stücke aufteilen, den gepuffertenAmount überwachen Wert sorgfältig zu vermeiden Kopf-of-line-Blockierung, und sogar implementieren ihre eigene Priorität Warteschlange für anstehende Nachrichten anstatt blind wartig sie alle auf der Steckdose. Viele Anwendungen generieren mehrere Klassen von Nachrichten: hochprioritäre Updates wie Steuerungsverkehr und Updates mit niedriger Priorität wie Hintergrundübertragungen. Um die Zustellung zu optimieren, sollte die Anwendung genau darauf achten, wie und wann jede Art von Nachricht in der Warteschlange in der Socket steht. Subprotokoll Negotiation WebSocket-Protokoll macht keine Annahmen über das Format jeder Nachricht: Ein einziges Bit verfolgt, ob die Nachricht Text - oder Binärdaten enthält, So dass es vom Client und Server effizient decodiert werden kann, aber ansonsten sind die Nachrichteninhalte undurchsichtig. Im Gegensatz zu HTTP - oder XHR-Anforderungen, die zusätzliche Metadaten über HTTP-Header jeder Anforderung und Antwort vermitteln, gibt es keinen solchen gleichwertigen Mechanismus für eine WebSocket-Nachricht. Wenn also zusätzliche Metadaten über die Nachricht benötigt werden, müssen sich der Client und der Server verpflichten, ein eigenes Subprotokoll zu implementieren, um diese Daten zu kommunizieren: Der Client und der Server können sich auf ein festes Nachrichtenformat upfronte. g vereinbaren. Die gesamte Kommunikation erfolgt über JSON-codierte Nachrichten oder ein benutzerdefiniertes Binärformat, und notwendige Nachrichtenmetadaten werden Teil der codierten Struktur sein. Wenn der Client und der Server unterschiedliche Datentypen übertragen müssen, können sie sich auf einen konsistenten Nachrichtenkopf verständigen, der verwendet werden kann, um die Anweisungen zu kommunizieren, um den Rest der Nutzlast zu dekodieren. Eine Mischung aus Text - und Binärnachrichten kann verwendet werden, um die Nutzdaten und Metadateninformationen zu vermitteln. Eine Textnachricht kann ein Äquivalent von HTTP-Headern vermitteln, gefolgt von einer Binärnachricht mit der Anwendungs-Payload. Diese Liste ist nur eine kleine Auswahl möglicher Strategien. Die Flexibilität und der geringe Overhead einer WebSocket-Nachricht kommen auf Kosten der zusätzlichen Anwendungslogik. Allerdings sind die Nachrichten-Serialisierung und das Management von Metadaten nur ein Teil des Problems. Sobald wir das Serialisierungsformat für unsere Nachrichten festlegen, wie stellen wir sicher, dass sowohl Client als auch Server einander verstehen und wie halten wir sie synchron. Zum Glück bietet WebSocket eine Einfache und bequeme Unterprotokoll-Verhandlungs-API, um das zweite Problem zu lösen. Der Client kann werben, welche Protokolle er auf dem Server als Teil seines anfänglichen Verbindungshändedrucks unterstützt: Array von Unterprotokollen, um während des WebSocket-Handshakes zu werben Überprüfen Sie das vom Server gewählte Unterprotokoll Wie das vorstehende Beispiel veranschaulicht, akzeptiert der WebSocket-Konstruktor ein optionales Array von Unterprotokollnamen , Die es dem Kunden ermöglicht, die Liste der Protokolle, die er versteht oder bereit ist, für diese Verbindung zu verwenden, zu werben. Die angegebene Liste wird an den Server gesendet und der Server darf eines der vom Client angekündigten Protokolle auswählen. Wenn die Unterprotokollverhandlung erfolgreich ist, wird der Onopen-Rückruf auf dem Client abgefeuert, und die Anwendung kann das Protokollattribut auf dem WebSocket-Objekt abfragen, um das gewählte Protokoll zu ermitteln. Auf der anderen Seite, wenn der Server keine der vom Client angekündigten Clientprotokolle unterstützt, ist der WebSocket-Handshake unvollständig: Der Onerror-Rückruf wird aufgerufen und die Verbindung wird beendet. Die Unterprotokollnamen werden von der Anwendung definiert und werden während des ersten HTTP-Handshakes an den Server gesendet. Andererseits hat das angegebene Subprotokoll keine Auswirkung auf die Kern-WebSocket-API. WebSocket-Protokoll Das von der HyBi-Arbeitsgruppe entwickelte WebSocket-Drahtprotokoll (RFC 6455) besteht aus zwei hochrangigen Komponenten: dem HTTP-Handshake, mit dem die Parameter der Verbindung verhandelt werden, und ein binärer Nachrichtenrahmen, um niedrige Overhead - Basierte Bereitstellung von Text - und Binärdaten. Das WebSocket-Protokoll versucht, die Ziele der vorhandenen bidirektionalen HTTP-Technologien im Kontext der vorhandenen HTTP-Infrastruktur als solche zu adressieren, es ist entworfen, um über HTTP-Ports zu arbeiten 80 und 443 Allerdings beschränkt das Design WebSocket nicht auf HTTP und zukünftige Implementierungen könnte Verwenden Sie einen einfacheren Handshake über einen dedizierten Port, ohne das gesamte Protokoll neu zu erfinden. - WebSocket-Protokoll RFC 6455 WebSocket-Protokoll ist ein voll funktionsfähiges, eigenständiges Protokoll, das außerhalb des Browsers verwendet werden kann. Allerdings ist seine primäre Anwendung als bidirektionaler Transport für Browser-basierte Anwendungen. Binary Framing Layer Client und Server WebSocket Applikationen kommunizieren über eine nachrichtsorientierte API: Der Absender stellt eine beliebige UTF-8 oder binäre Nutzlast zur Verfügung und der Empfänger wird über die Zustellung informiert, wenn die gesamte Nachricht verfügbar ist. Um dies zu aktivieren, verwendet WebSocket ein benutzerdefiniertes Binär-Framing-Format (Abbildung 17-1), das jede Applikationsnachricht in einen oder mehrere Frames aufteilt. Transportiert sie zum Ziel, setzt sie wieder zusammen und benachrichtigt den Empfänger, sobald die gesamte Nachricht empfangen wurde. Abbildung 17-1. WebSocket-Frame: 214 Bytes Nutzlast Frame Die kleinste Kommunikationseinheit, die jeweils einen Frame-Header mit variabler Länge und eine Nutzlast enthält, die die Applikationsnachricht ganz oder teilweise tragen kann. Nachricht Eine vollständige Sequenz von Frames, die einer logischen Applikationsnachricht zuordnen. Die Entscheidung, eine Anwendungsnachricht in mehrere Frames zu zerlegen, wird durch die zugrunde liegende Implementierung des Client - und Server-Framing-Codes gemacht. Daher bleiben die Applikationen immer wieder von den einzelnen WebSocket-Frames nicht bewusst oder wie das Framing durchgeführt wird. Allerdings ist es noch sinnvoll, die Highlights zu verstehen, wie jeder WebSocket-Frame auf dem Draht dargestellt wird: Das erste Bit jedes Frames (FIN) gibt an, ob der Frame ein endgültiges Fragment einer Nachricht ist. Eine Nachricht kann aus nur einem einzigen Rahmen bestehen. Der Opcode (4 Bits) gibt den Typ des übertragenen Frames an: Text (1) oder Binär (2) zum Übertragen von Applikationsdaten oder eines Steuerrahmens wie Anschlussschluss (8), Ping (9) und Pong (10) für Anschlusslifigkeit Prüfungen Das Maskenbit zeigt an, ob die Nutzlast maskiert ist (für Nachrichten, die vom Client an den Server gesendet werden). Die Nutzlast wird als Feld mit variabler Länge dargestellt: Wenn 0125, dann ist das die Nutzlastlänge. Wenn 126, dann stellen die folgenden 2 Bytes eine 16-Bit-Ganzzahl ohne Vorzeichen dar, die die Rahmenlänge angibt. Wenn 127, dann stellen die folgenden 8 Bytes eine 64-Bit-Ganzzahl ohne Vorzeichen dar, die die Rahmenlänge angibt. Der Maskierungsschlüssel enthält einen 32-Bit-Wert, der verwendet wird, um die Nutzlast zu maskieren. Payload enthält die Anwendungsdaten und benutzerdefinierte Erweiterungsdaten, wenn der Client und der Server eine Erweiterung ausgehandelt haben, wenn die Verbindung hergestellt wurde. Die Nutzlast aller Client-initiierten Frames wird mit dem im Frame-Header angegebenen Wert maskiert: Dadurch wird verhindert, dass bösartige Scripts, die auf dem Client ausgeführt werden, einen Cache-Poisoning-Angriff gegen Intermediäre ausführen, die das WebSocket-Protokoll nicht verstehen können. Für ausführliche Details dieses Angriffs, beziehen Sie sich auf Sprechen mit sich selbst für Spaß und Prot. Präsentiert auf der W2SP 2011. Als Ergebnis erhält jeder Server-gesendete WebSocket-Frame 210 Bytes Framing Overhead. Der Client muss auch einen Maskierungsschlüssel senden, der dem Header zusätzliche 4 Bytes hinzufügt, was zu 614 Bytes über Overhead führt. Es sind keine anderen Metadaten wie Header-Felder oder andere Informationen über die Nutzdaten verfügbar: Alle WebSocket-Kommunikation wird durch den Austausch von Frames durchgeführt, die die Nutzlast als opake Blob von Anwendungsdaten behandeln. WebSocket Multiplexing und Head-of-Line-Blocking WebSocket ist anfällig für Head-of-Line-Blocking: Nachrichten können in einen oder mehrere Frames aufgeteilt werden, aber Frames aus verschiedenen Nachrichten können nicht verschachtelt werden, da es kein Äquivalent zu einer Stream-ID gibt Der HTTP2-Framing-Mechanismus siehe Streams, Messages und Frames). Infolgedessen wird eine große Nachricht, auch wenn sie in mehrere WebSocket-Frames aufgeteilt ist, die Lieferung von Frames blockieren, die mit anderen Nachrichten verknüpft sind. Wenn Ihre Anwendung latenzempfindliche Daten liefert, achten Sie auf die Nutzdatengröße jeder Nachricht und erwägen Sie, große Nachrichten in mehrere Anwendungsnachrichten zu teilen. Der Mangel an Multiplexing in der Kern-WebSocket-Spezifikation bedeutet auch, dass jede WebSocket-Verbindung eine dedizierte TCP-Verbindung erfordert, die möglicherweise Ein potenzielles Problem für HTTP1.x-Implementierungen aufgrund einer eingeschränkten Anzahl von Verbindungen pro Ursprung, die vom Browser gepflegt werden, finden Sie unter Erschöpfende Client - und Serverressourcen. Auf der hellen Seite adressiert die von der HyBi-Arbeitsgruppe entwickelte Multiplexing-Erweiterung für WebSockets die letztere Einschränkung: Mit dieser Erweiterung kann eine TCP-Verbindung mehrere virtuelle WebSocket-Verbindungen bereitstellen, indem sie mit einer Kanal-ID markierte Frames verkapseln. Die Multiplex-Erweiterung verwaltet separate logische Kanäle , Von denen jeder das logische Äquivalent einer unabhängigen WebSocket-Verbindung, einschließlich separater Handshake-Header, vollständig bereitstellt. - WebSocket Multiplexing (Draft 10) Mit dieser Erweiterung können mehrere WebSocket-Verbindungen (Kanäle) über dieselbe TCP-Verbindung gemultiplext werden. Jedoch ist jeder einzelne Kanal immer noch anfällig für Head-of-Line-Blocking. Daher ist eine mögliche Problemumgehung, unterschiedliche Kanäle oder dedizierte TCP-Verbindungen zu verwenden, um mehrere Nachrichten parallel zu multiplexen. Schließlich ist zu beachten, dass die vorherige Erweiterung nur für HTTP1.x-Verbindungen erforderlich ist. Obwohl keine offizielle Spezifikation für den Transport von WebSocket-Frames mit HTTP2 verfügbar ist, wäre dies viel einfacher: HTTP2 hat ein eingebautes Stream-Multiplexing und mehrere WebSocket-Verbindungen können innerhalb einer einzigen Session transportiert werden, indem sie WebSocket-Frames innerhalb des HTTP2-Framing-Mechanismus einkapseln. Protokoll-Erweiterungen Die WebSocket-Spezifikation ermöglicht Protokoll-Erweiterungen: Das Drahtformat und die Semantik des WebSocket-Protokolls können mit neuen Opcodes und Datenfeldern erweitert werden. Während es etwas ungewöhnlich ist, ist dies ein sehr leistungsfähiges Feature, da es dem Client und dem Server ermöglicht, zusätzliche Funktionalität auf der Basis-WebSocket-Framing-Schicht zu implementieren, ohne dass ein Eingriff oder eine Kooperation aus dem Anwendungscode erforderlich ist. Was sind einige Beispiele für WebSocket-Protokoll-Erweiterungen Die HyBi-Arbeitsgruppe, die für die Entwicklung der WebSocket-Spezifikation verantwortlich ist, listet zwei offizielle Erweiterungen in der Entwicklung auf: Eine Multiplex-Erweiterung für WebSockets Diese Erweiterung bietet eine Möglichkeit für separate logische WebSocket-Verbindungen, einen Basiswert zu teilen Transportverbindung. Komprimierungserweiterungen für WebSocket Ein Framework zum Erstellen von WebSocket-Erweiterungen, die dem WebSocket-Protokoll Komprimierungsfunktionalität hinzufügen. Wie bereits erwähnt, benötigt jede WebSocket-Verbindung eine dedizierte TCP-Verbindung, die ineffizient ist. Multiplexing-Erweiterung dieses Problem durch die Erweiterung jedes WebSocket-Frames mit einer zusätzlichen Kanal-ID, damit mehrere virtuelle WebSocket-Kanäle eine einzelne TCP-Verbindung zu teilen. Ebenso stellt die Basis-WebSocket-Spezifikation keinen Mechanismus oder Bestimmungen für die Komprimierung der übertragenen Daten bereit: Jeder Rahmen trägt Nutzdaten, wie sie von der Anwendung bereitgestellt werden. Infolgedessen, während dies möglicherweise kein Problem für optimierte binäre Datenstrukturen ist, kann dies zu einem hohen Byteübertragungsaufwand führen, es sei denn, die Anwendung implementiert eine eigene Datenkomprimierungs - und Dekompressionslogik. In Wirklichkeit ermöglicht die Komprimierungserweiterung ein Äquivalent von Transfer-Codierungsverhandlungen, die von HTTP bereitgestellt werden. Um eine oder mehrere Erweiterungen zu aktivieren, muss der Client sie im anfänglichen Upgrade-Handshake werben und der Server muss die Erweiterungen auswählen und quittieren, die für die Lebensdauer der ausgehandelten Verbindung verwendet werden. Für ein Hands-on-Beispiel können Sie sich die Upgrade-Sequenz genauer ansehen. WebSocket Multiplexing und Komprimierung in der Wildnis Seit Mitte 2013 wird das WebSocket-Multiplexing noch nicht von einem beliebigen Browser unterstützt. Ebenso gibt es nur begrenzte Unterstützung für die Komprimierung: Google Chrome und die neuesten WebKit-Browser können eine x-webkit-deflate-frame-Erweiterung auf den Server werben. Der deflate-frame basiert jedoch auf einer veralteten Revision des Standards und wird in Zukunft veraltet sein. Wie der Name schon sagt, komprimiert per-frame die Payload-Inhalte auf einer Frame-by-Frame-Basis, die für große Nachrichten suboptimal ist, die zwischen mehreren Frames aufgeteilt werden können. Infolgedessen haben die letzten Revisionen der Komprimierungserweiterung auf die Nachrichten-Kompression umgestellt, was die gute Nachricht gibt. Die schlechte Nachricht ist per-Message-Komprimierung ist noch experimentell und ist noch nicht in jedem beliebigen Browser verfügbar. Infolgedessen sollte die Anwendung den Inhaltstyp der übertragenen Daten genau beachten und gegebenenfalls eine eigene Komprimierung anwenden. Das heißt, zumindest bis native WebSocket Kompression Unterstützung ist weit über alle beliebten Browser verfügbar. Dies ist besonders wichtig für mobile Anwendungen, bei denen jedes unnötige Byte dem Anwender hohe Kosten bringt. HTTP-Upgrade-Verhandlung Das WebSocket-Protokoll bietet viele leistungsstarke Funktionen: Nachrichten-orientierte Kommunikation, eigene Binär-Framing-Layer, Subprotocol-Verhandlung, optionale Protokoll-Erweiterungen und vieles mehr. Als Ergebnis, bevor irgendwelche Nachrichten ausgetauscht werden können, müssen der Client und der Server die entsprechenden Parameter vermitteln, um die Verbindung herzustellen. Die Nutzung von HTTP zur Durchführung des Handshakes bietet mehrere Vorteile. Zuerst macht es WebSockets kompatibel mit vorhandener HTTP-Infrastruktur: WebSocket-Server können auf Port 80 und 443 laufen, die häufig die einzigen offenen Ports für den Client sind. Zweitens erlaubt es uns, den HTTP-Upgrade-Fluss mit benutzerdefinierten WebSocket-Headern wiederzuverwenden und zu erweitern, um die Verhandlung durchzuführen: Sec-WebSocket-Version Vom Client gesendet, um die Version (13 für RFC6455) des WebSocket-Protokolls anzugeben, das es verwenden möchte. Wenn der Server die Client-Version nicht unterstützt, muss er mit einer Liste unterstützter Versionen antworten. Sec-WebSocket-Key Ein vom Autor gesendeter, vom Autor gestellter Schlüssel, der als Herausforderung für den Server dient, um zu beweisen, dass der Server die angeforderte Version des Protokolls unterstützt. Sec-WebSocket-Accept Server-Antwort, die den signierten Wert von Sec-WebSocket-Key enthält, was beweist, dass sie die angeforderte Protokollversion versteht. Sec-WebSocket-Protokoll Zur Verhandlung der Applikation subprotocol: Client kündigt die Liste der unterstützten Protokolle an, die der Server mit einem einzigen Protokollnamen antworten muss. Sec-WebSocket-Erweiterungen Verwendet, um WebSocket-Erweiterungen zu verhandeln, die für diese Verbindung verwendet werden sollen: Client bewirbt unterstützte Erweiterungen und der Server bestätigt eine oder mehrere Erweiterungen, indem er denselben Header zurückgibt. Damit haben wir jetzt alle notwendigen Stücke, um ein HTTP-Upgrade durchzuführen und eine neue WebSocket-Verbindung zwischen dem Client und dem Server zu verhandeln: Alle RFC6455-kompatiblen WebSocket-Server verwenden den gleichen Algorithmus, um die Antwort auf die Client-Herausforderung zu berechnen: den Inhalt der Sec-WebSocket-Key ist mit einer eindeutigen GUID-Zeichenfolge verknüpft, die im Standard definiert ist, ein SHA1-Hash wird berechnet und die resultierende Zeichenfolge wird base-64 codiert und an den Client zurückgesendet. Mindestens muss ein erfolgreicher WebSocket-Handshake die Protokollversion und einen vom Benutzer erstellten automatisch generierten Challenge-Wert enthalten, gefolgt von einem 101 HTTP-Antwortcode (Switching Protocols) vom Server mit einer Hash-Challenge-Antwort, um das ausgewählte Protokoll zu bestätigen Version: Client muss Sec-WebSocket-Version und Sec-WebSocket-Key senden. Server muss das Protokoll durch die Rücksendung von Sec-WebSocket-Accept bestätigen. Der Kunde kann eine Liste der Antragsunterprotokolle über Sec-WebSocket-Protokoll senden. Server muss eines der beworbenen Unterprotokolle auswählen und über Sec-WebSocket-Protokoll zurückgeben. Wenn der Server keine davon unterstützt, wird die Verbindung abgebrochen. Client kann eine Liste von Protokollerweiterungen in Sec-WebSocket-Erweiterungen senden. Server kann eine oder mehrere ausgewählte Erweiterungen über Sec-WebSocket-Erweiterungen bestätigen. Wenn keine Erweiterungen vorhanden sind, geht die Verbindung ohne sie aus. Schließlich, sobald der vorhergehende Handshake abgeschlossen ist und wenn der Handshake erfolgreich ist, kann die Verbindung nun als Zwei-Wege-Kommunikationskanal für den Austausch von WebSocket-Nachrichten verwendet werden. Von hier aus gibt es keine andere explizite HTTP-Kommunikation zwischen dem Client und dem Server und das WebSocket-Protokoll übernimmt. Proxies, Intermediaries und WebSockets In der Praxis haben viele Benutzer aus Sicherheits - und politischen Gründen einen eingeschränkten Satz von offenen Portsspezifisch Port 80 (HTTP) und Port 443 (HTTPS). Als Ergebnis wird die WebSocket-Verhandlung über den HTTP-Upgrade-Ablauf durchgeführt, um die beste Kompatibilität mit bestehenden Netzwerkrichtlinien und Infrastrukturen zu gewährleisten. Allerdings, wie wir bereits in Proxies, Intermediaries, TLS und New Protocols im Web festgestellt haben. Viele bestehende HTTP-Intermediäre können das neue WebSocket-Protokoll nicht verstehen, was zu einer Vielzahl von Fehlerfällen führen kann: Blindverbindungs-Upgrades, unbeabsichtigte Pufferung von WebSocket-Frames, Content-Modifikation ohne Verständnis des Protokolls, Fehlklassifizierung von WebSocket-Datenverkehr als kompromittierte HTTP-Verbindungen und bald. Der WebSocket Key und Accept Handshake adressiert einige dieser Probleme: Es ist eine Sicherheitsrichtlinie gegen Server und Intermediäre, die die Verbindung blind aktualisieren können, ohne das WebSocket-Protokoll zu verstehen. Allerdings, während diese Vorsichtsmaßnahme einige Deployment-Probleme mit expliziten Proxies, ist es dennoch unzureichend für transparente Proxies, die analysieren und ändern können die Daten auf dem Draht ohne vorherige Ankündigung. Der Workaround Stellen Sie eine sichere End-to-End-Tunneli. e her. Verwenden Sie WSS Durch das Verhandeln einer TLS-Sitzung vor dem Ausführen des HTTP-Upgrade-Handshakes, stellen der Client und der Server einen verschlüsselten Tunnel her, der alle zuvor aufgeführten Bedenken auflöst. Dies gilt insbesondere für mobile Clients, deren Verkehr oft eine Vielzahl von Proxy-Diensten durchläuft, die mit WebSocket nicht gut spielen können. WebSocket Use Cases und Performance WebSocket API bietet eine einfache Schnittstelle für bidirektionales, nachrichtenorientiertes Streaming von Text - und Binärdaten zwischen Client und Server: Übergeben Sie eine WebSocket-URL an den Konstruktor, richten Sie einige JavaScript-Callback-Funktionen ein, und wir sind auf und Runningthe Rest wird vom Browser gehandhabt. Fügen Sie hinzu, dass das WebSocket-Protokoll, das Binär-Framing, Erweiterbarkeit und Subprotocol-Verhandlung bietet, und WebSocket wird eine perfekte Passform für die Bereitstellung von benutzerdefinierten Anwendungsprotokollen im Browser. Jedoch, genau wie bei jeder Diskussion über die Leistung, während die Implementierungskomplexität des WebSocket-Protokolls von der Anwendung verborgen ist, hat es dennoch wichtige Leistungsimplikationen für wie und wann WebSocket verwendet werden sollte. WebSocket ist kein Ersatz für XHR oder SSE, und für die beste Leistung ist es entscheidend, dass wir die Stärken eines jeden Transports nutzen. Siehe XHR Use Cases und Performance und SSE Use Cases und Performance für eine Überprüfung der Leistungsmerkmale jedes Transports. Request and Response Streaming WebSocket ist der einzige Transport, der eine bidirektionale Kommunikation über dieselbe TCP-Verbindung ermöglicht (Abbildung 17-2): Der Client und der Server können nach Belieben Nachrichten ausrichten. Als Ergebnis bietet WebSocket eine geringe Latenzzeit von Text - und Binäranwendungsdaten in beide Richtungen. Abbildung 17-2. Der Kommunikationsfluss von XHR, SSE und WebSocket XHR ist für die Transaktionsanforderung-Antwort-Kommunikation optimiert: Der Client sendet die volle, gut geformte HTTP-Anforderung an den Server und der Server antwortet mit einer vollständigen Antwort. Es gibt keine Unterstützung für Anforderungs-Streaming, und bis die Streams-API verfügbar ist, keine zuverlässige Cross-Browser-Antwort-Streaming-API. SSE ermöglicht eine effiziente, servergesteuerte Server-to-Client-Streaming von textbasierten Daten: Der Client leitet die SSE-Verbindung ein und der Server nutzt das Ereignisquellenprotokoll zum Streamen von Updates für den Client. Der Kunde kann nach dem ersten Handshake keine Daten an den Server senden. Ausbreitung und Queuing Latency Switching Transporte von XHR zu SSE oder WebSocket verringert nicht den Roundtrip zwischen Client und Server Unabhängig vom Transport ist die Ausbreitungslatenz der Datenpakete gleich. Abgesehen von der Ausbreitungslatenz gibt es aber auch die Warteschlangen-Latenz. Die Zeit, die die Nachricht auf den Client oder Server warten muss, bevor sie an die andere Partei weitergeleitet werden kann. Im Fall der XHR-Abfrage ist die Warteschlangen-Latenzzeit eine Funktion des Client-Abfrageintervalls: Die Nachricht kann auf dem Server verfügbar sein, aber sie kann nicht gesendet werden, bis die nächste Client-XHR-Anfrage die Modellierungsleistung von XHR Polling enthält. Im Gegensatz dazu verwenden sowohl SSE als auch WebSocket eine persistente Verbindung, die es dem Server ermöglicht, die Nachricht (und den Client im Falle von WebSocket), sobald er verfügbar ist, zu versenden. Infolgedessen bezieht sich die Low-Latency-Lieferung für SSE und WebSocket speziell auf die Beseitigung der Nachrichtenwarteschlangen-Latenz. Wir haben noch nicht herausgefunden, wie man WebSocket-Datenpakete schneller als die Lichtgeschwindigkeit umsetzt. Message Overhead Sobald eine WebSocket-Verbindung aufgebaut ist, tauschen der Client und der Server Daten über das WebSocket-Protokoll aus: Anwendungsnachrichten werden in einen oder mehrere Frames aufgeteilt Von denen fügt von 2 bis 14 Bytes Overhead. Da das Framing über ein benutzerdefiniertes Binärformat erfolgt, können sowohl UTF-8 als auch binäre Anwendungsdaten effizient über denselben Mechanismus codiert werden. Wie verhält sich der Vergleich mit XHR und SSE SSE fügt bis zu 5 Bytes pro Nachricht hinzu, ist aber auf UTF-8 Inhalt beschränkt, siehe nur Event Stream Protocol. HTTP1.x-Anfragen (XHR oder anderweitig) werden zusätzliche 500800 Bytes HTTP-Metadaten und Cookies zum Messen und Steuern von Protokoll Overhead übertragen. HTTP2 komprimiert die HTTP-Metadaten, was den Overhead erheblich reduziert, siehe Header Compression. In der Tat, wenn die Header nicht zwischen Anfragen ändern, kann der Overhead so niedrig wie 8 Bytes Beachten Sie, dass diese Overhead-Nummern nicht die Overhead von IP, TCP und TLS Framing, die 60100 Bytes kombinierten Overhead pro hinzufügen Nachricht, unabhängig vom Anwendungsprotokoll siehe TLS-Datensatzgröße. Dateneffizienz und Komprimierung Jede XHR-Anfrage kann über die normale HTTP-Verhandlung das optimale Übertragungscodierungsformat (z. B. gzip für textbasierte Daten) verhandeln. Ähnlich, weil SSE auf UTF-8only Transfers beschränkt ist, können die Ereignisstromdaten effizient komprimiert werden, indem gzip über die gesamte Sitzung angewendet wird. Mit WebSocket ist die Situation komplexer: WebSocket kann sowohl Text - als auch Binärdaten übertragen, und als Ergebnis ist es nicht sinnvoll, die gesamte Sitzung zu komprimieren. Die binären Nutzlasten können bereits komprimiert werden. Als Ergebnis muss WebSocket einen eigenen Komprimierungsmechanismus implementieren und sie selektiv auf jede Nachricht anwenden. Die gute Nachricht ist die HyBi-Arbeitsgruppe, die die pro-message Komprimierungserweiterung für das WebSocket-Protokoll entwickelt. Allerdings ist es noch nicht in einem der Browser verfügbar. Infolgedessen kann es, wenn die Anwendung ihre eigene Komprimierungslogik durch sorgfältige Optimierung ihrer binären Nutzlasten (siehe Decodierung von Binärdaten mit JavaScript) und die Implementierung einer eigenen Komprimierungslogik für textbasierte Nachrichten implementiert, einen hohen Byte Overhead auf den übertragenen Daten Chrome und Einige WebKit-basierte Browser unterstützen eine ältere Revision (per-Frame-Komprimierung) der Komprimierungserweiterung zum WebSocket-Protokoll siehe WebSocket Multiplexing und Compression im Wild. Benutzerdefinierte Anwendungsprotokolle Der Browser ist für HTTP-Datenübertragungen optimiert: Er versteht das Protokoll und bietet eine breite Palette an Diensten wie Authentifizierung, Caching, Komprimierung und vieles mehr. Infolgedessen erben XHR-Anfragen alle diese Funktionalität kostenlos. By contrast, streaming allows us to deliver custom protocols between client and server, but at the cost of bypassing many of the services provided by the browser: the initial HTTP handshake may be able to perform some negotiation of the parameters of the connection, but once the session is established, all further data streamed between the client and server is opaque to the browser. As a result, the flexibility of delivering a custom protocol also has its downsides, and the application may have to implement its own logic to fill in the missing gaps: caching, state management, delivery of message metadata, and so on The initial HTTP Upgrade handshake does allow the server to leverage the existing HTTP cookie mechanism to validate the user. If the validation fails, the server can decline the WebSocket upgrade. Leveraging Browser and Intermediary Caches Using regular HTTP has significant advantages. Ask yourself a simple question: would the client benefit from caching the received data Or could an intermediary optimize the delivery of the asset if it could cache it For example, WebSocket supports binary transfers, which allows the application to stream arbitrary image formats with no overheadnice win However, the fact that the image is delivered within a custom protocol means that it wont be cached by the browser cache, or any intermediary (e. g. a CDN). As a result, you may incur unnecessary transfers to the client and much higher traffic to the origin servers. The same logic applies to all other data formats: video, text, and so on. As a result, make sure you choose the right transport for the job A simple but effective strategy to address these concerns could be to use the WebSocket session to deliver non-cacheable data, such as real-time updates and application control messages, which can trigger XHR requests to fetch other assets via the HTTP protocol. Deploying WebSocket Infrastructure HTTP is optimized for short and bursty transfers. As a result, many of the servers, proxies, and other intermediaries are often configured to aggressively timeout idle HTTP connections, which, of course, is exactly what we dont want to see for long-lived WebSocket sessions. To address this, there are three pieces to consider: Routers, load-balancers, and proxies within own network Transparent and explicit proxies in external network (e. g. ISP and carrier proxies) Routers, firewalls, and proxies within the clients network We have no control over the policy of the clients network. In fact, some networks may block WebSocket traffic entirely, which is why you may need a fallback strategy. Similarly, we dont have control over the proxies on the external network. However, this is where TLS may help By tunneling over a secure end-to-end connection, WebSocket traffic can bypass all the intermediate proxies. Using TLS does not prevent the intermediary from timing out an idle TCP connection. However, in practice, it significantly increases the success rate of negotiating the WebSocket session and often also helps to extend the connection timeout intervals. Finally, there is the infrastructure that we deploy and manage ourselves, which also often requires attention and tuning. As easy as it is to blame the client or external networks, all too often the problem is close to home. Each load-balancer, router, proxy, and web server in the serving path must be tuned to allow long-lived connections. For example, Nginx 1.3.13 can proxy WebSocket traffic, but defaults to aggressive 60-second timeouts To increase the limit, we must explicitly define the longer timeouts: 60-minute inactivity timeout for tunnels The gotcha with the preceding example is the extra tunnel timeout. In HAProxy the connect. client. and server timeouts are applied only to the initial HTTP Upgrade handshake, but once the upgrade is complete, the timeout is controlled by the tunnel value. Nginx and HAProxy are just two of hundreds of different servers, proxies, and load balancers running in our data centers. We cant enumerate all the configuration possibilities in these pages. The previous examples are just an illustration that most infrastructure requires custom configuration to handle long-lived sessions. Hence, before implementing application keepalives, double-check your infrastructure first. Long-lived and idle sessions occupy memory and socket resources on all the intermediate servers. Hence, short timeouts are often justified as a security, resource, and operational precaution. Deploying WebSocket, SSE, and HTTP2, each of which relies on long-lived sessions, brings its own class of new operational challenges. Performance Checklist Deploying a high-performance WebSocket service requires careful tuning and consideration, both on the client and on the server. A short list of criteria to put on the agenda: Use secure WebSocket (WSS over TLS) for reliable deployments. Pay close attention to polyfill performance (if necessary). Leverage subprotocol negotiation to determine the application protocol. Optimize binary payloads to minimize transfer size. Consider compressing UTF-8 content to minimize transfer size. Set the right binary type for received binary payloads. Monitor the amount of buffered data on the client. Split large application messages to avoid head-of-line blocking. Leverage other transports where applicable. Last, but definitely not least, optimize for mobile Real-time push can be a costly performance anti-pattern on mobile handsets, where battery life is always at a premium. Thats not to say that WebSocket should not be used on mobile. To the contrary, it can be a highly efficient transport, but make sure to account for its requirements :class WebSocket Description This class implements a WebSocket according to the WebSocket protocol specification in RFC 6455. Both client-side and server-side WebSockets are supported. Server-side WebSockets are usually created from within a HTTPRequestHandler. Client-side WebSockets are created using a HTTPClientSession. Note that special frames like PING must be handled at application level. In the case of a PING, a PONG message must be returned. Inheritance Member Summary Enumerations These error codes can be obtained from a WebSocketException to determine the exact cause of the error. No Connection: Upgrade or Upgrade: websocket header in handshake request. int receiveFrame( void buffer, int length, int amp flags ) Receives a frame from the socket and stores it in buffer. Up to length bytes are received. If the frames payload is larger, a WebSocketException is thrown and the WebSocket connection must be terminated. Returns the number of bytes received. A return value of 0 means that the peer has shut down or closed the connection. Throws a TimeoutException if a receive timeout has been set and nothing is received within that interval. Throws a NetException (or a subclass) in case of other errors. The frame flags and opcode (FrameFlags and FrameOpcodes ) is stored in flags. int sendFrame( const void buffer, int length, int flags FRAMETEXT ) Sends the contents of the given buffer through the socket as a single frame. Values from the FrameFlags. FrameOpcodes and SendFlags enumerations can be specified in flags. Returns the number of bytes sent, which may be less than the number of bytes specified. Certain socket implementations may also return a negative value denoting a certain condition. Sends a Close control frame to the server end of the connection to initiate an orderly shutdown of the connection. void shutdown( Poco::UInt16 statusCode, const std::string amp statusMessage ) Sends a Close control frame to the server end of the connection to initiate an orderly shutdown of the connection. akzeptieren
No comments:
Post a Comment