web-dev-qa-db-ja.com

WordPressはWebSocketをサポートするようにできますか?

Websockets は、HTML 5にラップされたクールで最先端のテクノロジです。基本的に、Webサーバーとの永続的な双方向通信を可能にするためにWebSocketを開くことができます。クライアント(ユーザーインターフェース)は自発的にメッセージを送信でき、サーバーもメッセージを送信できます。

既存の技術 (JavaScript)はすべてのものがクライアントによって開始されることを要求します - サーバはクライアントが要求していないものをクライアントに送ることができません。そのため、スクリプトは常に更新され、変更されていない可能性のあるデータを再要求する必要があります。 Websocketは " Push "ベースでもっと動作し、いつでも新しいデータがパイプを通過するようにします。

残念ながら、ほとんどの(とにかく見つけられる)ウェブソケットの実装は動作するために特定のサーバーアプリケーションを必要とします。 WebSocket要求を処理するために、人々はポート80と443(httpとhttps)でApacheを実行し、別のポート(すなわち8000か8080)で別のシステム(通常Node.js)を実行します。

これはうまくいきますが、いくつかの欠点があります。

私は自分が構築したいプラグインを持っていて、それはWordPressの中でウェブソケットを使うことから大幅に利益を得るでしょう。しかし、ユーザーが2台目のWebサーバーをインストールする必要がある場合(通常、共有ホスティングを利用する人々にとっては不可能)、それはプラグインとしては機能しません。

それで、あなたが経験を積んだあなたの誰かにとって、あなたはどのようにWordPressをウェブソケットと互換性があるようにするでしょうか? WordPressに通信自体を処理させますか、それとも別のミニサーバースクリプトをプラグインにバンドルしますか?あなたがすでにこれをしているならば、どのようにあなたはWordPress自体を壊すことなくそれを達成しましたか?

可能なリソース?


11/21/11更新

Apache(共有ホストでWPを実行するために最も一般的にインストールされているサーバー)がネイティブにWebSocketを実際に処理できない方法についての話をすべて聞いて、私は代替案について疑問に思います。いくつかのプラグイン(JetPackなど)は、コンテンツを生成するために外部サービスまたはAPIと通信します。

統計はAutomatticにコンテンツを要求します。 Akismetは外部サーバーとデータをやり取りします。締め切り後に公開時にコンテンツが送信されます。いくつかのSEOツールは、外部システムを介して物事をやり取りします。

それで、WordPressプラグインの中にWebSocketコードを収容する代わりとして、WebSocketサービスを中央の場所でホストして、代わりにそれと相互作用するWordPressフロントエンドを持つことは実行可能でしょうか?

16
EAMann

WebSocketはWebSocketsプロトコル(WS:/example.com/yourscript.js)を使用して同期接続を開きます。つまり、接続は開いたままにされ、ブラウザ専用になります。

apache2(ほとんどの共有ホスティングプロバイダで使用されている)のようなhttpdサーバーはhttpプロトコル:http://example.com/yourscript.jsを使用し、非同期接続を開きます - サーバーとブラウザの間に接続が開かれていないことを意味します。 (特定の設定パラメータを設定することで、ある程度オープン接続を延ばすことができます - しかし一般的に言えば、非同期です。)

ご想像のとおり、ブラウザとサーバ間のオープン接続を維持すると、各ブラウザ接続により多くのサーバリソースが割り当てられるため、各要求後に接続を切断するよりもサーバリソースに負担がかかります。共有ホスティングプロバイダは、共有ホスティングでWSをサポートすることは明らかに却下されています。

共有ホストの中にはmod_pythonがインストールされていることがあり、それによってあなたのプラグインユーザが pywebsocket を実行することを可能にするものがあります。

それで、pywebsocketサーバーを作成するためにpythonコードをバンドルしたプラグインを想像するかもしれませんが、それをサポートするApacheサーバーを考えれば、そうするようなプラグインを配布するのは合理的ではないと思います。

7
marfarma

あなたの最新情報に応えて、私の考えでは、そして私が行った研究に基づいて、それは非常に最良の選択肢だろう。フロントエンドプラグインを作成し、プラグインと対話する外部のWebSocketサービスを作成し、必要に応じてアイデアを収益化できるように料金を請求することをお勧めします。 WebSocketサービスのソースコードを提供し、プラグインに設定を作成してWebSocketサービスの場所(どのドメイン/ IPとポート)を設定することもできます。

3
user15143

この目的のために "古典的な" Apache2 - Apache2-mpm-prefork - を忘れてください。おそらくApache2-mpm-eventがこれを処理できますが、実験的なものです。 Apache2はイベント駆動型ではないので、@ marfarmaによって説明されている問題は存在します。この種のサービスを提供するには、イベント駆動型のWebサーバーが必要です。たとえば、 cherokee またはnginxなどです。

nginx は(wordpress.comが自分のサーバーとしても使用しているため)WordPressにとって本当に有益なことがあります。また、指定した要求をnode.jsサービスに代行することもできます。

トピック内のいくつかの例:

私はまた nginx + php-fpm + wordpress設定のための小さなチュートリアルを作りました

2
petermolnar

もう一つの可能​​性のある解決策はサードパーティのWebソケットプロバイダを使うことです、私はPusher(http://pusher.com/)で少し遊んでいます、あなたが何をするのにうまくいくかあなたがそれを利用できるAPIがありますしようとしています。私は自分のWordPressサイトでそれをどのように利用できるかを熟考してきました。

考えられる不利な点は、プラグインを使用しようとしている他の人々もそれを機能させるためにプッシャーアカウントを取得する必要があることです。自分のWeb Socketsサーバーをインストールして保守する必要がある場合よりも、作業する方がはるかに簡単です。実際には、他の人がプラグインを使用しようとしている場合には、これが有利になります。

1
Rick Curran

簡単な答えは次のとおりです。はい、できます。ただし、ホストしている単一障害点VPSよりも少し分散したものを検討することもあります。たぶん、いくつかの負荷分散されたEC2システムあるいはそのようなものを調べますか? (私はあなたがそのような便利さを提供するための収入源を持っていると思います。 grin

0
ZaMoose