Swoole_php の例に基づいた PHP および WebSocket チャット ルームの実装

WBOY
リリース: 2016-08-17 13:02:31
オリジナル
1024 人が閲覧しました

ウェブソケット

WebSocket は単なるネットワーク通信プロトコルです

http、ftp などがすべてネットワーク通信プロトコルであるのと同じように、あまり考えすぎないでください。

HTTP などの非永続的プロトコルと比較して、Websocket は永続的なネットワーク通信用のプロトコルです

WebSocketとHTTPの関係

交差点はありますが、すべてではありません。


Websocket は、ハンドシェイクを完了するために HTTP プロトコルの一部を借用するだけです。 (HTTPの3ウェイハンドシェイクはここで1回だけ完了します)

http リクエスト ヘッダーと WebSocket リクエスト ヘッダーの比較:


HTTP:

元々、クライアントは http (馬の背) 経由でサーバーにリクエストを送信し、サーバーはそのリクエストを処理し (返信を書き)、再度 http (馬の背) で返しました。

リンクが切れていました。

WebSocket:

クライアントは、http (乗馬) を通じてサーバーにレターを要求しますが、同時に

(2 つのパイプ) を運びます。サーバーが WebSocket プロトコル (2 つのパイプを持つインターフェイス) をサポートしている場合、WebSocket プロトコルを使用します。利用可能な情報を返す ( horse を破棄する) 場合、その後の情報の送信では、一方が人為的にパイプを切断しない限り、これら 2 つのパイプが使用されます。サーバーがパイプをサポートしていない場合、クライアントはリンクの要求に失敗し、エラー メッセージを返します。 ; Upgrade:websocketConnection:Upgrade

http と WebSocket の応答ヘッダーの比較:


WebSocket、Ajaxポーリング、ロングポーリングの違い

1 つ目は、ajax ポーリングです。ajax ポーリングの原理は非常に簡単で、ブラウザーは数秒ごとにサーバーに新しい情報があるかどうかを問い合わせることができます。


シーン再現:


依頼者:ラララ、何か新しい情報はありますか(リクエスト)


サーバー: いいえ (応答)


依頼者:ラララ、何か新しい情報はありますか(リクエスト)


サーバー: なし。 。 (返答)


依頼者:ラララ、何か新しい情報はありますか(リクエスト)


サーバー: とてもイライラしていますね。 。 (返答)


クライアント: ラララ、何か新しいメッセージ(リクエスト)はありますか


サーバー: わかりました、わかりました、こちらがあなたのものです。 (返答)


クライアント: ラララ、何か新しいメッセージ(リクエスト)はありますか


サーバー:。 。 。それなし。 。 。 。それなし。 。いいえ

ロングポーリング

実際、原理はajaxポーリングと似ており、ここでは説明しません。 上記からわかるように、ポーリングは実際には継続的に HTTP 接続を確立し、サーバーの処理を待機しています。これは、HTTP プロトコルのもう 1 つの特性である受動性

を反映している可能性があります。同時に、各 http リクエストとレスポンスの後、サーバーはすべてのクライアント情報を破棄します。次のリクエストには、アイデンティティ情報 (Cookie)、

ステートレスが含まれる必要があります。 Websocket の登場により、これらの問題は見事に解決されました

したがって、上記のシナリオは次のように変更できます。

クライアント: ラララ、Websocket プロトコルを確立したい、必要なサービス:

チャット、Websocket プロトコル バージョン: 17 (HTTP リクエスト)

サーバー: OK、確認済み、Websocket プロトコル (HTTP プロトコル切り替え) にアップグレードされました

クライアント: 情報をお持ちの場合は、私にプッシュしてください。 。


サーバー: わかりました、時々お話します。


クライアント: バラブはアラバラと戦い始めます


サーバー: 蒼井そら


クライアント: 鼻血が出たので拭かせてください...


サーバー: Hahabul Education は素晴らしいです、はははは


サーバー: すごく笑ってます笑


スウール

しかし、PHP と HTML5 を使用して WebSocket のリクエストと応答を完了するために、私は何千マイルも旅し、ジャングルの奥深くで Swoole を見つけました。 純粋な C 言語で書かれた PHP 言語の非同期、並列、高性能ネットワーク通信フレームワークは、PHP 言語の非同期マルチスレッド サーバー、非同期 TCP/UDP ネットワーク クライアント、非同期 MySQL、データベース接続プール、AsyncTask、メッセージ キューを提供します、ミリ秒タイマー、非同期ファイルの読み書き、非同期 DNS クエリ。

サポートされているサービス:


HTTPサーバー
WebSocketサーバー


TCPサーバー


TCPクライアント


Async-IO(非同期)


タスク(スケジュールされたタスク)


環境依存関係:

Linux、FreeBSD、MacOS、タイプ 3 オペレーティング システムのみをサポートします

Linux カーネル バージョン 2.3.32 以降

PHP5.3.10以降

gcc4.4以降のバージョンまたはclang

cmake2.4+、C/C++ ライブラリとして libswoole.so にコンパイルするときに cmake を使用する必要があります

インストール:

次のソフトウェアがシステムに存在することを確認する必要があります:

php-5.3.10以降

gcc-4.4 以降

作る

自動設定

Swoole は PHP 拡張機能として実行されます

インストール(root権限):

CDスウール

phpize

./configure

作る

sudo make install

php.iniを設定する

拡張子=swoole.so

Swooleを勉強したい人は、自分でマニュアルを読んでください(文章は下手ですが、それでも理解できます)

チャットルームを作る

サーバー側:socket.php

リーリー

クライアント: Socket.html

リーリー

上記は Swoole をベースにした PHP と WebSocket チャット ルームの実装の全内容です。この記事は、誰もが PHP と WebSocket を学び、チャット ルームを開発するのに役立つと思います。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート