|
|
1
9
我认为只有PHP的解决方案很难实现(几乎不可能)。我想出了两个解决你问题的办法。 PHP/Redis解决方案肯德尔提出的问题:
Redis非常稳定。开发人员确实编写了一些干净的C代码。您应该在github;)上查看它。很多大型网站也在使用redis。例如github,他们有一个非常有趣的博客 post 他们是如何使github快速的:)。超级进料器也使用 redis . 有更多的大公司正在使用redis;)。我建议你用谷歌搜索一下。
PHP非常友好。很多用户都在为redis编写PHP库。协议非常简单。您可以使用telnet;)进行调试。例如,快速查看predis是否实现了阻塞pop。
我想到的(伪代码……): 处理器.php:
我的java解决方案今天早上我想我创造了一个 java program 你可以用它来解决你的问题。
应用程序引擎的任务队列
|
|
|
2
10
让您的php脚本执行一个exec调用,以安排您的php脚本在您需要的时候使用命令“at”运行 exec(“22:56/usr/bin/php myscript.php”); at在指定的时间执行命令。 从手册页: At允许相当复杂的时间规范,扩展POSIX.2 标准。它接受HH:MM格式的时间来在spe上运行作业 cific时间(如果时间已经过去了,第二天就是 您还可以指定午夜、中午或茶点(下午4点)和 你可以在一天中的某个时间加上AM或PM作为跑步的后缀 以月份名称day的形式给出日期,可选择年份,或 注明日期,格式为MMDDYY或MM/DD/YY或DD.MM.YY。指定 也可以给时间像现在+计数时间单位,其中的时间单位 可以是分钟、小时、天或周,您可以告诉at运行 用今天的时间做今天的工作,明天再做 把时间安排在明天。 此外,如果您需要1秒的时间分辨率,请让脚本在一分钟开始时运行,然后只需休眠n秒,直到该执行为止。 |
|
|
3
4
这似乎是数据库中事件队列的最佳位置。
让您的用户创建的事件(通过访问网页触发)在数据库中创建一个条目,其中包括要执行的操作的说明,以及该操作何时发生的时间戳。守护进程(持久化应用程序或CRON触发的)检查DB中本应发生的事件(
另外,有很多人在服务器上使用PHP作为通用的守护程序脚本语言,Cron可以执行一个PHP脚本(并确认“app”的一个实例已经在运行),该脚本每隔一段时间检查一次事件队列。你可以让一个小应用程序在一分钟的不活动后死掉,然后由CRON重新启动。该应用程序可以检查数据库的条目在一个快速频率的你选择(如1)。通常Cron不能以超过每分钟一次的速度执行定时事件。 |
|
|
4
2
我也推荐队列策略,但您似乎不喜欢将数据库用作队列。你有一个XMPP基础设施,所以利用它:使用 pubsub 节点并将事件发布到此节点。Pubsub可以选择配置为以持久的方式存储未缓存的项。 您的守护进程(无论使用何种语言)可以在启动时获取所有存储项,并订阅更改以获得有关传入操作的通知。通过这种方式,您可以以一种优雅的异步方式解决问题。 |
|
|
5
1
|
|
|
6
0
|
|
|
7
0
我不知道你为什么要避开克朗。您可以在表中创建一个请求队列,并让cron启动一个进程来检查当前作业。 有几个问题,取决于您的确切要求。例如:
我有许多运行PHP的守护程序(使用守护程序工具)。使用这种方法,您可以将请求保存在核心中,并在内部执行您想要的任何时间。 然而,如果您想要的是精确和可靠的计时,那么您可能应该完全远离PHP。 |
|
|
8
0
我想不出任何东西能满足你的要求:
简单的方法是使用以下函数的组合:
但是,正如@deceze所说的,这可能不是一个好主意,因为如果设置高延迟,Apache最终可能会杀死子进程(除非您使用的是PHP CLI,否则这会更容易)。它也不允许您更改/删除事件,除非您设置了更复杂的逻辑和数据库来保存事件。也,
|
|
|
9
0
我只是经常使用cron运行一个PHP文件(即5分钟)。PHP文件将检查是否有任何事件需要在下一个间隔内触发,获取间隔事件列表,并休眠到下一个事件。醒来,启动列表中的下一个事件,睡眠到下一个事件,重复直到完成。 您甚至可以通过分叉或启动另一个php文件来扩展它,从而实际触发事件。然后您可以同时触发多个事件。 |
|
|
10
0
使用其中一个cron来运行一个checker怎么样?例如,它可以执行DB中的内容。 或者使用“at”linux命令来调度某个命令的执行? |
|
|
11
0
您真正需要的是一种支持xmpp的事件驱动语言,为此,您只需查看node.js/v8和支持xmpp的库—它本机支持并专为您所需而设计。您也可以沿着Java路线前进,但是如果您想快速地进行移植并获得大量新特性和对所做工作的支持,node就是其中之一。
|
|
|
12
0
存在一个纯PHP解决方案。和埃文的回答差不多。只需为事件引入一个“处理”状态,就可以减少DB上的负载(以及锁定问题)。当processing脚本从队列(DB)中提取事件时,它们被标记为“processing”并提交。脚本完成后,它们被标记为“已处理”。如果出现错误或脚本失败,“处理”事件必须更新回原始状态。 |
|
|
13
0
|
|
14
0
用redis检查一下。可能对你的问题有用 |
|
|
15
-9
使用睡眠功能: http://php.net/sleep |
|
OREO · 如何在不实际单击复选框的情况下选中它 1 年前 |
|
|
Dan · 在元素外部设置html点击处理程序点击后立即触发 1 年前 |
|
|
Mero · Svelte在父事件调用上调用新的嵌套事件处理程序 2 年前 |
|
|
iorice · usercontrol dll中的组件事件 2 年前 |
|
|
Awin · 点击事件功能不适用于Vue组件 2 年前 |
|
|
Kiwi · 将可共享的自定义数据添加到事件MS图形api 2 年前 |