我正在尝试进行AJAX调用(通过JQuery),这将启动一个相当长的过程.我希望脚本只是发送一个响应,表明进程已经启动,但是在PHP脚本运行完毕之前,JQuery不会返回响应.
我用"关闭"标题(下面)尝试了这个,还有输出缓冲; 似乎都不起作用.任何猜测?或者这是我在JQuery中需要做的事情?
<?php
echo( "We'll email you as soon as this is done." );
header( "Connection: Close" );
// do some stuff that will take a while
mail( 'dude@thatplace.com', "okay I'm done", 'Yup, all done.' );
?>
Run Code Online (Sandbox Code Playgroud) 我希望对另一台服务器上的另一个脚本发出一个简单的GET请求.我该怎么做呢?
在一种情况下,我只需要请求外部脚本而无需任何输出.
make_request('http://www.externalsite.com/script1.php?variable=45'); //example usage
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,我需要获取文本输出.
$output = make_request('http://www.externalsite.com/script2.php?variable=45');
echo $output; //string output
Run Code Online (Sandbox Code Playgroud)
说实话,我不想乱用CURL,因为这不是CURL的工作.我也不想使用http_get,因为我没有PECL扩展.
fsockopen会工作吗?如果是这样,如何在不读取文件内容的情况下执行此操作?没有其他办法吗?
谢谢大家
我应该补充一下,在第一种情况下,我不想等待脚本返回任何内容.据我所知,file_get_contents()会等待页面完全加载等?
我的脚本由服务器调用.从服务器我会收到ID_OF_MESSAGE和TEXT_OF_MESSAGE.
在我的脚本中,我将处理传入的文本并使用params生成响应:ANSWER_TO_ID和RESPONSE_MESSAGE.
问题是我正在向incomming发送响应"ID_OF_MESSAGE",但是在收到http响应200之后,向我发送消息的服务器将把他的消息设置为发送给我(这意味着我可以发送给他的响应).
解决方案之一是将消息保存到数据库并制作一些将每分钟运行的cron,但我需要立即生成响应消息.
是否有一些解决方案如何发送到服务器http响应200而不是继续执行PHP脚本?
非常感谢
我要做的是从数据库或从memcache异步加载一些数据.
我知道我知道."PHP不支持线程".
但是register_tick_function怎么样?这不是真正的线程吗?
有没有人使用register_tick_function进行任何预测预加载或任何后台处理?
我维护一个自定义的类似CMS的应用程序.
每当提交文档时,都会执行几项任务,这些任务可以大致分为以下几类:
类别1包括与文档内容相关的各种MySQL表的更新.
类别2包括解析存储在MySQL LONGTEXT字段中的HTML内容以执行一些自动锚标记转换.我怀疑在这项任务中花费了大量的计算时间.
类别3包括仅使用与文档对应的少数字段对基于MySQL的简单搜索索引的更新.
所有这些任务都需要完成才能使文档提交完整.
承载此应用程序的计算机具有双四核Xeon处理器(总共8个核心).但是,每当文档提交时,执行的所有PHP代码都被限制为在其中一个核上运行的单个进程.
我的问题:
您有多少方案(如果有的话)将PHP/MySQL Web应用程序处理负载分散到多个CPU内核中?我理想的解决方案基本上会产生一些进程,让它们在几个内核上并行执行,然后阻塞直到所有进程完成.
相关问题:
您最喜欢的PHP性能分析工具是什么?
我一直在对ReactPHP进行一些测试,因为它看起来非常棒.对于简单的套接字服务器,我使用以下react/socket代码对其进行了测试.
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$socket->on('connection', function ($conn) {
echo 'New client !';
$conn->on('data', function ($data) use ($conn) {
$conn->write("Wow, some data, such cool\n");
$conn->close();
});
});
$socket->listen(1337);
$loop->run();
Run Code Online (Sandbox Code Playgroud)
直到这一点,没有问题.服务器显示New client !何时连接客户端并且客户端收到响应.
但我做了一个新的测试,对data事件进行了更多的处理.为了说明我的话,我将添加一个for需要几毫秒才能完成的循环:
$conn->on('data', function ($data) use ($conn) {
$conn->write("Wow, some data, such cool\n");
for ($i=0; $i<10000000; $i++); // here
$conn->close();
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,有10个客户端,客户端将Wow, some data, such cool在所有客户端处理后显示文本(所以~2秒),但服务器将显示New client !而不等待.
所以在这里我缺乏理解,ReactPHP是一个异步I/O,但PHP是单线程的,如果输入和输出之间有很多处理,那将阻止所有客户端.
我正在尝试创建一个简单的客户端/服务器应用程序,因此我正在尝试PHP中的套接字.
现在我在C#中有一个简单的客户端,它可以很好地连接到服务器,但我只能一次将一个客户端连接到这个服务器(我在网上找到了这个代码示例,并为了测试目的稍微调整了一下).
有趣的是,基于同样的例子,我发现了同样的问题:https://stackoverflow.com/questions/10318023/php-socket-connections-cant-handle-multiple-connection
我试图了解它的每个部分,我很接近看到它的工作原理,但由于某种原因,当我连接第二个客户端时,第一个客户端断开连接/崩溃.
任何人都可以给我一些疯狂的想法或指向我应该看的地方吗?
<?php
// Set time limit to indefinite execution
set_time_limit (0);
// Set the ip and port we will listen on
$address = '127.0.0.1';
$port = 9000;
$max_clients = 10;
// Array that will hold client information
$client = array();
// Create a TCP Stream socket
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
// Bind the socket to an address/port
socket_bind($sock, $address, $port) or die('Could not bind to address');
// Start listening for connections
socket_listen($sock); …Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法在php中启动一个单独的线程来发送和发送电子邮件.我有一个小型的Web服务,它从iPad应用程序中获取一些信息,然后将数据插入数据库并随后发送电子邮件.问题是有时电子邮件发送时间太长而iPad的请求超时.有没有办法可以在单独的线程上发送电子邮件?我基本上想在电子邮件发送之前告诉iPad一切都成功了.
一些示例代码:
... Process info and insert into DB
echo "success"; //this should be returned to the iPad right away.
//start new thread here or possibly fork???
$email->send();
Run Code Online (Sandbox Code Playgroud)
谢谢!