Php xml和json请求速度慢的问题
我在写一个网站,它展示了来自Own3d和Twitch的一些实时流。我对own3d和twitch api的xml和json请求速度慢有一些问题,所以我联系了own3d。他们非常友好,这是他们的回答: 你好,雅各布 我们的API响应时间是正常的,但是您可能遇到的问题 体验是因为您每次都在请求信息 您的网站已刷新 大多数其他网站,如clgaming.net,都有一个 cron作业运行,大约每分钟收集一次信息 哪些流是联机和脱机的,并写入本地数据库 因此,当有人加载网站时,它会很快 尊敬的own3D.tv支持团队 这就是我所做的,我编写了一个PHP脚本,将信息写入我的Mysql数据库,稍后当我将网站上线时,我将对其进行cronjob,它工作正常,但随着我的数据库越来越大,我现在再次遇到问题: 现在我的数据库中有65条拖缆,我想我又遇到了请求时间问题。首先,我收到了错误消息: 致命错误,超过了30秒的最大执行时间 我认为没问题,让我们把最长的执行时间。(Php xml和json请求速度慢的问题,php,mysql,xml,json,cron,Php,Mysql,Xml,Json,Cron,我在写一个网站,它展示了来自Own3d和Twitch的一些实时流。我对own3d和twitch api的xml和json请求速度慢有一些问题,所以我联系了own3d。他们非常友好,这是他们的回答: 你好,雅各布 我们的API响应时间是正常的,但是您可能遇到的问题 体验是因为您每次都在请求信息 您的网站已刷新 大多数其他网站,如clgaming.net,都有一个 cron作业运行,大约每分钟收集一次信息 哪些流是联机和脱机的,并写入本地数据库 因此,当有人加载网站时,它会很快 尊敬的own3D.t
ini\u集('max\u execution\u time',300);
)
现在发生的是,我得到了不工作请求的随机错误
例如:
警告:
文件\u获取\u内容(http://api.justin.tv/api/stream/list.json?channel=schabs)
[函数.文件获取内容]:
无法打开流:HTTP请求失败!HTTP/1.1400错误请求
在第20行的D:\wamp\www\Lol Streamportal\database\u implementize.php中
Own3d和twitch都会出现这种情况,正如我所说的,哪些流可以工作,哪些流不能工作是随机的。实际上,我认为应该可以让它工作得更好,因为clgaming f.ex有1000多个流,如果在cronjob脚本中在线,可能需要检查这些流
在我再次联系own3d或twitch之前,我想问你们,因为我对XML和Json都没有经验,也许你们中的一些人知道如何修复它,或者也许我不应该用PHP编写脚本,而应该用JDBC之类的工具来编写
我不想炫耀我的全部代码,但我可以给你造成问题的函数的代码。(如果真的需要,我也可以发布其他代码)
正如我所说,当我的数据库较小时,我一点问题都没有。但由于我收到了50多份参赛作品,我开始遇到问题。
谢谢你的回答
编辑:
我刚有个主意。也许twitch.tv和Own3d在一段时间内允许发送的请求数量有限,也许我会就此联系他们。要解决这个问题,我可以编写2到3个不同的脚本,只发送对数据库中前30个条目的请求,第二个脚本发送对下30个条目的请求,依此类推。您存储了多少数据?你能减少吗?你在用指数吗?DB中使用的是什么类型的存储引擎?我有3个表,两个表有20个条目,一个表有65个条目,我无法缩减它。是的,我对每个条目都使用索引,但我不知道我在数据库中使用的是哪个存储引擎。(我使用MySQL)但我实际上不认为DB存储是问题所在,所有查询似乎都工作得很好,我认为是XML和Json请求导致了问题。请记住,您的存储引擎可能是个问题。如果您使用MyISAM,它将在删除或更新等更改期间锁定整个表。如果要使用InnoDB,它将只锁定正在修改的行。
function get_online($stream_id, $typ) {
// Ownd3d Streams
if($typ == 'o') {
$xml = simplexml_load_file('http://api.own3d.tv/liveCheck.php?live_id='.$stream_id);
$isLive = $xml->liveEvent->isLive;
if($isLive == 'true') {
return true;
}
else {
return false;
}
}
// Twitch Streams
else if($typ == 't') {
$api = "http://api.justin.tv/api/stream/list.json?channel=".$stream_id;
$json = file_get_contents($api);
$exist = strpos($json, $stream_id);
if($exist) {
return true;
}
else{
return false;
}
}
else {
return false;
}
}