首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >套接字编程PHP脚本持续加载

问套接字编程PHP脚本持续加载
EN

Stack Overflow用户
提问于 2012-06-29 19:24:20
回答 1查看 1.1K关注 0票数 0

我想实现一个聊天应用程序,其中php将充当服务器,android将充当客户端。

问题是,php脚本一直在加载,并且没有退出,我引入了一个循环来监听和输出从我的android emulator.But连续发送的消息,当我删除它一直加载的循环时,一旦我从我的android模拟器发送消息,它就输出一次,脚本stops.Now,我不知道如何实现这一点(即,每当我从android发送消息时,它会在页面上回显它们,并一直这样做,直到我发送退出消息,退出脚本)。

下面是我的php脚本:

代码语言:javascript
复制
 set_time_limit (0);

$address = '10.116.27.107';
$port = 1234;

$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, $address, $port) or die('Could not bind to address');

socket_listen($sock);
while(1)
{
   $client = socket_accept($sock);
   $input = socket_read($client, 1024);

   $output = preg_replace("[ \t\n\r]","",$input).chr(0);
   socket_write($client, $output);

       if($input=="exit")
   break;

echo $input;

socket_close($client);

}
socket_close($sock);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-29 20:14:56

为了实现一个聊天应用程序,你必须改进你的代码,使其能够处理多个连接,这比只读写一个客户端要复杂得多。从我的经验来看,从单用户系统到多用户系统是一个巨大的飞跃,这就是为什么学习如何通过反复试验来编写聊天系统需要时间。

然而,我相信这样做会帮助你避免你的问题,我猜这很可能是由于所谓的阻塞-系统在继续之前正在等待输入/输出,但是没有得到任何东西。

基本上,在使用聊天应用时,你需要考虑一些事情:

  1. 你需要从php命令行运行你的聊天脚本,在浏览器中运行会给你带来更复杂的问题,比如超时以及浏览器所期望的网页工作方式。如果你使用Mac OSX,你可以使用终端,如果你了解linux,你显然可以使用linux,如果你使用Windows…获取puTTY并连接到linux服务器,我相信你可以在Windows上运行

命令行,只是这不是我曾经尝试(或希望)做的事情。

  1. 你需要使用socket_select()在用户评论中有一些如何使用它的简单示例,php总是需要知道客户端处于什么状态-即当你可以读的时候只读,当你可以写的时候才写……通常情况下,如果你可以读或写,那么你必须这样做,以保持平稳的工作(而不是最终冻结)-聊天应用程序是相当棘手的这个reason.
  2. Clients可以突然断开和连接,所以你需要处理这在读和写process.
  3. Whenever读和写-特别是使用php -读和写功能可能不会发送或接收他们的所有信息一次完成。与fwrite()和fread()类似,您应该检查已写入了多少(如果未完成,则继续写入),并继续读取,直到在您的客户端上没有剩下任何东西可供终止某些系统期望消息以特定的终止字符结束/终止-即\n或\0。大多数聊天应用程序要么检测使用哪一个,要么将两者都作为每条谨慎消息的一部分发送。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11260917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档