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 进行此操作)或将我发送到网络上的一个很好的教程吗?

4

1 回答 1

1

我觉得你有点走错路了。

您编写了两个小的 php 脚本,其中服务器端不仅是在网络服务器上运行的脚本,而且已经是服务器。虽然您的客户端就像一个浏览器(只是有点基本)。直截了当地写了一个聊天应用程序和一个聊天服务器,但没有写一个网站。

这意味着您应该将这两个脚本作为控制台脚本运行。在 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 回答