サーバー:
<?PHPの クラスのチャット { HOST = '0.0.0.0'とのconst; // IPアドレスIP 0.0.0.0代表は、すべてのアクセス受け入れ //ポート番号;のconst PART = 8080 プライベート$サーバー=ヌル; //シングルトンオブジェクトを格納しwebsocket_server __construct関数パブリック() { // swoole_websocket_serverをインスタンス化し、私たちのチャットクラス属性に保存されている、単一の実施形態に設計する上 > =新しい新しいswoole_websocket_serverサーバー(自己:: HOST、PART ::セルフ)の$ this -を; //リスナー接続イベント ([$この、 '開く時']、 '開く')ONの$ this - >サーバ- > //モニタ受信したイベントメッセージ ( '上の$ this - >サーバ- >メッセージ'、[$この、「のonMessage ']); // closeイベントをリッスン (上の$ this - >サーバー- >' '[$この、' OnCloseの「])に近いです。 //静的ファイルへのアクセスを許可するように設定し ます$ this->サーバー- >セット([ 'DOCUMENT_ROOT' => '/ WWW / chat1'、// どこincomingディレクトリの静的ファイル 'enable_static_handler' =>真//静的ファイルへのアクセスを許可 ]); //サービスを開始し ます$ this->サーバー- >開始() ; } / ** *接続に成功コールバック * @paramサーバーの$ *の@param要求$ * / パブリック関数開く時(サーバーの$、$リクエスト) { $要求- > FD '接続' PHP_EOL ;. //印刷をエコー。私たちのターミナル } / ** *コールバック関数は、情報を受信 * @paramサーバの$ * @paramのフレームの$ * / パブリック関数のonMessage(サーバの$、$フレーム) { エコーフレーム- $> FDは'来たと言った:' $フレーム- >データPHP_EOL; / ... /私たちの端末に印刷します foreachの($ FD AS $サーバー- >接続が){// TCPコネクショントラバーサルイテレータ、取ります各オンラインのクライアントIDに クライアントから送信された//メッセージ、すべてのユーザーにプッシュ、また、すべてのオンラインのクライアントにブロードキャスト呼び出すことができ ます$ server->プッシュ($ FD、 json_encode([「ノー」=> $ フレーム- > FD、 'MSG' => $フレーム- > [データ])); } } / ** *切断コールバック * @paramサーバーの$ *の@paramの$ FD * / パブリック関数OnCloseの(サーバーの$、$ FD) { $ FD 'GO' PHP_EOLをエコー;. //私たちの端子を印刷する。 } } $ OBJ =新しい新しいチャット();
クライアント
<スクリプト> 関数リンク(){ VARのURL = 'WS://192.168.33.60:8080'。 ソケット=新しいのWebSocket(URL); socket.onopen =関数(){LOG1( '连接成功')} socket.onmessage =関数(MSG){ログ(msg.data)にconsole.log(MSG);} socket.onclose =関数(){LOG1( '断开连接')} } 関数DIS(){ socket.close (); ソケット= NULL; } 関数LOG1(VAR1){ $( 'ログイン')(VAR1 +' \ R \ n')追加。 } 関数ログ(VAR1){ VARのV = $ parseJSON(VAR1)。 $(」ログイン'')用户'+ V ['いいえ'] +(付加'说: '+ V [' MSG '] + [ \ Rを\ n '); } 関数センド(){ VARテキスト= $( '#テキスト')のval()。 socket.send(テキスト); } 関数SEND2(){ VARのJSON = JSON.stringify({ 'タイプ': socket.send(JSON)。 } </ SCRIPT> </ body> </ HTML>
サーバを起動します
PHP Chat.php
HTMLを開くには、クライアントのブラウザへのアクセス
参考https://www.jianshu.com/p/ac77f05bee56