it-swarm.com.de

Kann WordPress so erstellt werden, dass es Websockets unterstützt?

Websockets sind eine coole, innovative Technologie, die in HTML5 eingebunden ist. Grundsätzlich können Sie ein Websocket öffnen, um eine dauerhafte bidirektionale Kommunikation mit einem Webserver zu ermöglichen. Der Client (Benutzeroberfläche) kann spontan Nachrichten senden, und der Server kann auch Nachrichten senden.

Bestehende Technologie (JavaScript) erfordert, dass alles vom Client gestartet wird - der Server kann nichts an den Client senden, was der Client nicht angefordert hat. Skripte müssen daher ständig aktualisiert werden und Daten erneut anfordern, die sich möglicherweise nicht geändert haben. Websockets arbeiten mehr auf " Push " -Basis und lassen neue Daten immer wieder über die Pipeline kommen.

Leider erfordern die meisten (ohnehin alles, was ich finden kann) Websocket-Implementierungen eine bestimmte Serveranwendung, um zu funktionieren. Die Benutzer führen Apache auf den Ports 80 und 443 (http und https) und ein anderes System (normalerweise Node.js) auf einem anderen Port (d. H. 8000 oder 8080) aus, um Websocket-Anforderungen zu verarbeiten.

Das funktioniert natürlich, hat aber einige Nachteile.

Ich habe ein Plugin, das ich erstellen möchte, das sehr von der Verwendung von Websockets in WordPress profitieren würde. Wenn ein Benutzer jedoch einen zweiten Webserver installieren muss (normalerweise nicht für Benutzer mit Shared Hosting), funktioniert er nicht als Plugin.

Wie würden Sie für jeden von Ihnen, der Erfahrung hat, WordPress mit Websockets kompatibel machen? Würden Sie WordPress dazu bringen, die Kommunikation selbst zu verwalten, oder ein anderes Miniserver-Skript in das Plugin einbinden? Wenn Sie dies bereits getan haben, wie haben Sie es erreicht, ohne WordPress selbst zu beschädigen?

Mögliche Ressourcen?


21.09.11 Update

Angesichts der Tatsache, dass Apache (der am häufigsten installierte Server zum Ausführen von WP auf einem gemeinsam genutzten Host) Web-Sockets nicht nativ verarbeiten kann, frage ich mich, ob es eine Alternative gibt. Mehrere Plugins (z. B. JetPack) kommunizieren mit einem externen Dienst oder einer API, um Inhalte zu generieren.

Stats fordert Inhalte von Automattic an. Akismet sendet Daten von einem externen Server hin und her. Nach Ablauf der Frist werden Inhalte zum Zeitpunkt der Veröffentlichung eingereicht. Einige SEO-Tools leiten die Dinge über externe Systeme hin und her.

Wäre es also als Alternative zur Unterbringung des Websocket-Codes in einem WordPress-Plugin denkbar, einen Websocket-Dienst an einem zentralen Ort zu hosten und stattdessen ein WordPress-Frontend damit zu interagieren?

16
EAMann

WebSockets verwenden das websockets-Protokoll: WS: /example.com/yourscript.js und öffnen eine synchrone Verbindung. Dies bedeutet, dass die Verbindung offen und für den Browser reserviert gehalten wird.

httpd-Server wie Apache2 (von den meisten gemeinsam genutzten Hosting-Anbietern verwendet) verwenden das http-Protokoll: http://example.com/yourscript.js und öffnen eine asynchrone Verbindung. Dies bedeutet, dass keine Verbindung zwischen dem Server und dem Browser hergestellt wird. (Sie können offene Verbindungen in bescheidenem Umfang verlängern, indem Sie bestimmte Konfigurationsparameter festlegen. Im Allgemeinen ist dies jedoch asynchron.)

Wie Sie sich vorstellen können, werden durch die Aufrechterhaltung offener Verbindungen zwischen dem Browser und dem Server mehr Serverressourcen für jede Browserverbindung reserviert, und die Serverressourcen werden daher stärker beansprucht, als Verbindungen nach jeder Anforderung zu trennen. Shared Hosting-Anbieter sind verständlicherweise nicht bereit, WS bei Shared Hosting zu unterstützen.

Während auf bestimmten gemeinsam genutzten Hosts möglicherweise mod_python installiert ist, wodurch Ihre Plugin-Benutzer pywebsocket ausführen können, heißt es in der Dokumentation von pywebsocket eindeutig, dass "pywebsocket für Test- oder Versuchszwecke gedacht ist".

Obwohl man sich vorstellen kann, dass ein Plugin Python-Code bündelt, um einen Pywebsocket-Server zu erstellen, halte ich es bei einem Apache-Server, der diesen unterstützt, nie für sinnvoll, ein Plugin zu verbreiten, das dies tut.

7
marfarma

Als Reaktion auf Ihr Update wäre dies meiner Meinung nach und basierend auf den von mir durchgeführten Untersuchungen die beste Option. Noch besser wäre es, das Front-End-Plugin und den externen Websocket-Service zu erstellen, um mit den Plugins zu kommunizieren, und eine Gebühr dafür zu erheben, damit Sie Ihre Idee monetarisieren können, wenn Sie möchten. Sie können sogar den Quellcode für den Websocket-Dienst bereitstellen und eine Einstellung im Plugin erstellen, um festzulegen, wo (welche Domain/IP und welcher Port) sich der Websocket-Dienst befindet.

3
user15143

Vergessen Sie dazu den "klassischen" Apache2 - Apache2-mpm-prefork. Vielleicht könnte Apache2-mpm-event damit umgehen, aber es ist experimentell. Da Apache2 nicht ereignisgesteuert ist, besteht das von @marfarma beschriebene Problem. Für diese Art der Bereitstellung benötigen Sie einen ereignisgesteuerten Webserver, beispielsweise cherokee oder nginx.

nginx kann ein echter Vorteil für WordPress sein (da wordpress.com es auch als Server verwendet), und es kann bestimmte Anfragen zum Beispiel an einen node.js-Dienst weiterleiten.

Einige Beispiele im Thema:

Ich habe auch ein kleines Tutorial für nginx + php-fpm + wordpress setup gemacht.

2
petermolnar

Eine andere mögliche Lösung ist die Verwendung eines Web-Sockets-Anbieters von Drittanbietern. Ich habe ein bisschen mit Pusher (http://pusher.com/) herumgespielt. Es gibt eine API, auf die Sie zugreifen können, die möglicherweise für Ihre Zwecke gut funktioniert versuchen es zu tun. Ich habe darüber nachgedacht, wie ich es in meinen eigenen WordPress-Sites nutzen könnte.

Ein möglicher Nachteil ist, dass andere Benutzer, die versuchen, Ihr Plugin zu verwenden, ebenfalls ein Pusher-Konto benötigen, damit es funktioniert. Es ist viel einfacher, damit zu arbeiten, als einen eigenen Web-Sockets-Server zu installieren und warten zu müssen. Dies wäre tatsächlich ein Vorteil, wenn andere versuchen, Ihr Plugin zu verwenden.

1
Rick Curran

Die kurze Antwort lautet: Ja, es ist machbar. Ich könnte etwas verteilteres untersuchen als einen einzelnen VPS-Fehlerpunkt, den Sie hosten. Vielleicht in einige lastausgeglichene EC2-Systeme schauen oder so? (Ich gehe davon aus, dass Sie eine Einnahmequelle für solche Annehmlichkeiten haben. grin )

0
ZaMoose