PHP WebSocketを使用して簡単なチャットルームを作成する方法

伊谢尔伦
リリース: 2023-03-07 21:10:01
オリジナル
2455 人が閲覧しました

ソケットは、アプリケーション層とTCP/IPプロトコルファミリーの間で通信する中間のソフトウェア抽象化層であり、インターフェイスのセットです。設計モードでは、Socket は実際にはファサード モードであり、複雑な TCP/IP プロトコル ファミリを Socket インターフェイスの背後に隠し、ユーザーにとっては一連の単純なインターフェイスだけで、指定されたプロトコルを満たすように Socket がデータを編成できます。前の章では、socket と http の違いについて説明しました。socket を理解するには、まず http と tcp の違いを理解する必要があります。簡単に言うと、一方は短いチェーン、もう一方は長いチェーンです。 1 つはデータをプルするサーバー、もう 1 つはサーバーでアクティブにデータをプッシュできます。 HTTP 接続は、短い接続と長い接続に分けられます。短い接続は通常、ajax を使用して実装でき、長い接続は WebSocket です。短い接続は実装が比較的簡単ですが、消費するリソースが多すぎます。 Websocket は効率的ですが、互換性に関していくつかの問題があります。 Websocketはhtml5のリソースです。

php websocket を使用して簡単なチャット ルームを作成するプロセスの紹介

php チャット ルームは、以前は ajax と PHP によって実装されていました。今日は、PHP チャット ルームでの WebSocket テクノロジーの実践的な例を見ていきます。

1. フロントエンド クライアント

は、どのようにしてフロントエンド ファイルからバックエンド サーバーに情報を送信するのか、その後の調査により、js WebSocket テクノロジを使用していることが判明しました。以下は、js WebSocket の一般的な操作です。

コードは次のとおりです:

var socket = new WebSocket('ws://localhost:8080');     
    // 打开Socket     
    socket.onopen = function(event) {     
    }    
    // 发送一个初始化消息    
     socket.send('I am the client and I\'m listening!');     
    // 监听消息    
     socket.onmessage = function(event) {     
        console.log('Client received a message',event);     
      };  //phpfensi.com    
    // 监听Socket的关闭    
      socket.onclose = function(event) {     
        console.log('Client notified socket has closed',event);     
      };     
      // 关闭Socket....     
    socket.close()     
   socket.onerror = function(evt){console.log(“WebSocketError!”);};
ログイン後にコピー

手順: まず、この行は指定されたサーバーにハンドシェイク要求を送信します。サーバーが有効な http ヘッダーを返した場合、ハンドシェイクは成功します。その後、サーバーから送信されたメッセージを処理できます。 onmessage イベントをリッスンすることによって。監視できるイベントは他にも多数あります。前の URL を参照してください。


2. バックグラウンドサーバー

のプロセスはおおよそ次のとおりです:

a. ソケットプロセスを一時停止し、接続を待機します

b. ソケット接続が確立された後、ソケット配列を走査します

c.ハンドシェイクがない場合は、ハンドシェイク操作を実行します。ハンドシェイクがある場合は、データが解析されて出力用のバッファに書き込まれます。

rreee

説明: いくつかの重要なポイントがあります。 1 つは while (true) でプロセスをハングします。それ以外の場合、プロセスは 1 回実行した後に終了します。 2 つ目は、socket_select 関数とソケット_accept 関数の使用です。 3 番目は、クライアントが最初のリクエストを行うときのハンドシェイクです。

次のプロセスは非常に明確です。新しいクライアント要求が到着したら、socket_accept を使用してリソースを作成し、それを $this->accept 接続プールに追加します。そして、そのラベル isHand を false に設定し、次回のサイクル時に ($this->cycle[] = $this->socket;$this->cycle が変更されたため、socket_select が返されるため) アップグレード ハンドシェイクを実行します。あとは新しいメッセージを待つだけです。

【おすすめ関連チュートリアル】

1.「

php.cn Dugu Jiijian (4) - PHPビデオチュートリアル

2.

以上がPHP WebSocketを使用して簡単なチャットルームを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!