相关疑难解决方法(0)

php执行后台进程

我需要在用户操作时执行目录副本,但目录非常大,所以我希望能够执行这样的操作,而无需用户知道副本完成所需的时间.

任何建议将不胜感激.

php

248
推荐指数
8
解决办法
22万
查看次数

可扩展,延迟的PHP处理

我正在开发一个需要延迟PHP事件的在线PHP应用程序.基本上我需要能够在初始命中URL之后执行任意PHP代码x很多秒(但可能是几天).我需要相当精确地执行这些PHP事件,我也希望它具有相当的可扩展性.我正在努力避免安排一个cron作业每秒运行一次.我正在研究Gearman,但它似乎没有提供任何计划事件的能力,据我所知,PHP并不真正意味着作为一个守护进程运行.

如果我能告诉一些外部进程在下一个事件应该运行的确切时间在PHP服务器上轮询"事件检查器"URL,那将是理想的.此轮询时间需要能够随意减少或增加,因为事件可以被删除并添加到队列中.有什么想法以优雅的方式来实现这一目标吗?从外部调用PHP(必须解析HTTP请求或通过CLI调用)只需要很多开销就可以满足我的需求.

我目前的计划是编写一个PHP守护程序,它将使用gearman从PHP服务器运行事件和接口.PHP守护进程将围绕SplMinHeap构建,所以希望性能不会太糟糕.这个想法在我的口中留下了不好的味道,我想知道是否有人有更好的主意?想法略有改变.阅读编辑2.

编辑:

我正在创建一个在线游戏,让玩家轮流使用可变时间限制.我正在使用XMPP和BOSH来允许我向客户推送消息,但是我已经完成了所有这些工作.现在我正在尝试添加一个任意事件,该事件在从客户端播放之后触发,以便让客户端(以及游戏中的其他人员)花费很长时间.我无法在客户端使用定时触发器,因为这样可以被利用(因为客户端可以自己玩).希望有所帮助.

编辑2:

谢谢大家的反馈.虽然我认为你的大多数想法在小范围内都能很好地发挥作用,但我觉得它们不能很好地扩展(外部事件管理器)或缺乏该项目所需的准确性(CRON).此外,在这两种情况下,它们都是外部部件,可能会失败并增加已经很复杂的系统的复杂性.

我个人觉得满足这个项目要求的唯一干净的解决方案是编写一个处理延迟事件的PHP守护进程.我已经开始编写我认为第一个 PHP runloop.它处理观察套接字和执行延迟的PHP事件.希望当我接近完成这个项目时,我可以发布源代码,如果你们有兴趣的话.到目前为止,在测试中它已经证明是有希望的解决方案(没有内存泄漏或不稳定的问题).

编辑3:这是一个名为LooPHP的PHP事件循环库的链接,供有兴趣的人使用.

TL; DR要求

  • 在延迟的时间(从几秒到几天)调用(最好是原生的)PHP
  • 任意处理事件的创建/更新/删除(我期待大量取消的电话).
  • 处理预定的高负荷事件(每台服务器100-1000秒)
  • 通话时间应在预定时间的一秒钟内
  • 在这一点上,我不愿意将代码库重写为另一种语言(也许有一天我会)

php events asynchronous daemon

19
推荐指数
2
解决办法
6025
查看次数

PHP游戏服务器,多个TCP客户端?

我正在制作一个基于Web浏览器的多人游戏.鉴于其实时性,我已经确定websockets是处理通信的最佳方式.客户端使用HTML5画布渲染游戏和websockets以与主机通信.

我选择使用PHP来托管游戏,因为它似乎是托管服务提供商的首选.我以前没有使用PHP,但是在Java中使用websockets做了类似的事情,但是在很大程度上依赖于多线程.

我一直在寻找有关多个客户端的PHP套接字的一些教程; 但是他们中的大多数都会为每个客户端分配新流程.由于我将有一个不断运行的游戏循环,我不认为这是合适的.

我想要实现的是在连接时为每个客户端分配端口,监听新客户端,与当前客户端列表交换数据以及一起运行游戏循环的方法.

我需要帮助的地方是:

  • 如何查找端口并为新客户端分配端口,通知该端口的客户端,并在断开连接时进行清理.
  • 如何做以上,以及所有其他套接字事务,而不会阻塞游戏循环.以部分块接受来自客户端的消息并且仅对完整消息起作用是可接受的.

谁能给我一些关于如何实现这些目标的技术建议?我不认为这对于PHP的问题看起来太多了但是如果我错了就纠正我!

我想要实现服务器端的一些伪代码.这些函数都不应该阻塞:数组客户端;

while(gamerunning)
{
    CheckForNewClients();
    GetStatusFromClients();
    DoGameUpdate();
    SendGameStateToClients();
}
Run Code Online (Sandbox Code Playgroud)

[更新]对于任何感兴趣的人,我创建了一个支持Web套接字的专用应用程序(特别是使用Java和'TooTallNates'的Web套接字库)而不是实际的Web服务,因为它似乎更有意义,尽管似乎大多数Web浏览器都有由于安全问题,因此在垃圾箱中挂起网络插座.

php tcp websocket

10
推荐指数
2
解决办法
9192
查看次数

标签 统计

php ×3

asynchronous ×1

daemon ×1

events ×1

tcp ×1

websocket ×1