2017-08-11 14 views
0

私は非常に古いアプリケーションを持っていますが、我々は2つの主な機能を持っている私たちのチャット機能のためのPHP APIを持っています:最後の20メッセージを取得し、Socket.io残りのAPI

現在、私たちはデータの更新にAJAXを使用していますが、私はデータをより速く更新したいと思います。

socket.ioをphp APIに接続することはできますか?私はこのトピックについて何かを検索しようとしましたが、その良い例はありません。私はこのようなことをどうやって達成できるのか、少しは私に教えてください。

  • ユーザーは新しいユーザーがメッセージを追加するときにメッセージ
  • でJSONを返すサーバーをnodejsに接続されている、データベースに新しいメッセージを追加するために、それは「新しいメッセージ」イベントをトリガし、その後サーバーコールAPIをnodejs
  • イベント "新しいメッセージ"がnodejsサーバーによってリッスンされると、データベースからデータがフェッチされ、jsonにフォーマットされ、イベント "data updated"
  • がトリガーされます。彼らはjsonのメッセージの新しいリストを取得するだけです

データベースからのデータが(トリガーされたイベントによって)1回だけフェッチされ、その後静的なJSONとしてユーザーに提供されるため、これは一部のキャッシュレイヤーと同様に機能すると考えています。

ありがとうございます。

注:以前のphp apiを使用する必要があるのは、チャットの書式設定でサーバー上で処理される特別な機能が必要なためです。それを一から書き直すことはできません。私はちょうどいくつかの新しいデータがあるときにサーバーからユーザーにデータをプッシュするためにsocket.ioを使用したいと思います。今では、たとえ新しいメッセージがなくても、もちろん不要なdb接続などを作成しても、ajaxを使って新しいデータを要求します。

答えて

0

WebSocketはAJAXより高速ではありませんが、これを実装する方法。 NodeJSは、他のサーバー(あなたの場合はPHP)にHTTPリクエストを送ることができます。以下のドキュメントを参照してください:https://nodejs.org/api/http.html#http_http_request_options_callback
またはこのリクエストモジュールを使用してください:https://www.npmjs.com/package/requestより簡単なコード。

webSocketを使用して成功情報をクライアントに送り返す前に、restAPIがHTTPで応答する必要があることを忘れないでください。これは、パフォーマンスの向上がそれほど大きくないことを意味します。

+0

お返事ありがとうございます!なぜそれがパフォーマンスを改善しないと思いますか?私の考えは、すべてのクライアントが静的なデータをダウンロードしていて、新しいメッセージがあるときだけ、ノードサーバーがPHPの残りのAPIに接続し、フェッチしてからすべてのクライアントにサービスを提供するということです。この場合、データベースからのデータの取得は1回だけ(新しいメッセージがある場合)行われるため、1000または2000のクライアントがある場合は重要ではありません。しかし、多分私は何かを見逃している、または私の考えがあまりにも理想的です... –

+0

私はちょうどあなたのコンセプトを非常によく理解していませんでした。あなたが今説明していることは、HTTPからのみ実行された場合は1000または2000の一意のHTTP要求の要件があり、そのすべてがヘッダーをサーバーからクライアントに転送する必要があるため、パフォーマンスが向上するはずです。結構です。 – itsundefined