2

私はphpでソケットを学び、理解しようとしていますが、whileループに少し問題があります。

これは私の基本的なコードです:

クライアント側

<?php
     set_time_limit(0);

     $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

     $res = socket_connect($socket, '127.0.0.1', 2000);

     $input = "Client to Server Message";

     socket_write($socket, $input, strlen($input));
     $res = socket_read($socket, 1024);

     echo $res;

     socket_close($socket);
?>

そしてサーバー側

<?php
     set_time_limit(0);

     $address = "127.0.0.1";
     $port = 2000;

     $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

     socket_bind($socket, $address, $port) or die("Can't bind the socket");

     socket_listen($socket);

     echo "Server waiting connexion...";

     $client = socket_accept($socket);

     $input = socket_read($client, 1024);

     echo "\nInput : ".$input;

     $output = 'Server to Client Message';

     socket_write($client, $output);

     socket_close($client);
     socket_close($socket);

     echo "\nServer closed";
 ?>

それは機能しますが、クライアント側からの複数のメッセージを処理するためにサーバー側に while ループを追加したい場合、ブラウザは無限ループを実行し、サーバーからメッセージを取得できません。

これを機能させるにはどうすればよいですか?

誰かがPHPのみでソケットを使用してチャットのようなことを行う基本的な方法を説明してもらえますか(socket.ioとNodeJsでこれを行うことができます)、またはWeb上の優れたチュートリアルに送ってもらえますか?

4

1 に答える 1

1

あなたは少し間違った道を進んでいると思います。

サーバー側が Web サーバー上で実行される単なるスクリプトではなく、既にサーバーになっている 2 つの小さな php スクリプトを作成しました。クライアント側はブラウザとまったく同じですが(少し基本的です)。つまり、チャット アプリケーションとチャット サーバーは作成しましたが、Web サイトは作成していません。

つまり、両方のスクリプトをコンソール スクリプトとして実行する必要があります。Linux では、「php」コマンドがあります。Windows では、このhttp://php.net/manual/de/install.windows.commandline.phpをお読みください。

シンプルなチャットが必要な場合は、これを使用します。

<!-- html stuff -->
<pre>
<?php
//chat.php

// Safe message on server using file
if(isset($_GET['msg'])){
    // be carefull it's not clever to let the world write
    // to your server even if it's a textfile
    $f = fopen("db.txt","a+");
    fputs($f, $_GET['msg']);
    fclose($f);
}

// print all messages
readfile("db.txt");

?>
</pre>
<form>
 <textarea name="msg"></textarea>
 <input type="submit"/>
</form>

チャットのような感覚を得るには、ページのリロードが不要であることを意味し、Javascript および AJAX リクエストが必要です。ここを見てください http://www.w3schools.com/php/php_ajax_php.asp

問題は、私が見つけて使用したチャットのすべての優れたチュートリアルが、通常、mysql データベースも使用していることです。

于 2013-10-05T01:13:10.607 に答える