【问题标题】:Event based mysql for php socket?用于php套接字的基于事件的mysql?
【发布时间】:2011-12-14 07:51:17
【问题描述】:

我有一个使用 php/html/javascript/jquery 编码的 Web 客户端。我的客户端通过 php 脚本从 mysql 服务器获取 javascript (in post) 数据。我知道我可以在那个 php-apache-mysql 盒子上运行一个 php 套接字服务器,但是我如何告诉我的套接字服务器 mysql 服务器表上的新记录刚刚发生,而不每隔 X 秒检查一次新条目,通过王冠工作?有没有“基于事件”的系统?

【问题讨论】:

    标签: php javascript mysql sockets


    【解决方案1】:

    众所周知,PHP 中基于事件的体系结构难以实现,但由于存在许多限制,至少可以说,它不是此类事情的最佳语言。您最好在 Node.js 或其他本身是事件驱动的语言/环境中执行此操作。

    PHP 不是最好的语言,因为除其他原因外,它不能是多线程的,而且您不能编写自己的自定义非阻塞例程 - 这使您在设计多客户端套接字时处于严重劣势服务器。

    话虽如此,如果您决定在 PHP 中创建您的套接字服务器,则可以这样做,尽管方式有点可怕。基本流程是这样的:

    • Have a MySQL trigger that calls an external program through something like sys_exec()
    • 它调用的外部程序(这可能是一个 PHP 脚本)连接到正在运行的套接字服务器,通过您喜欢的任何方式,可能是套接字连接,可能是共享内存,也可能是完全类似于 POSIX 信号的其他东西,并通知新行的套接字服务器进程。
    • 套接字服务器现在可以运行 SELECT(或者不运行,也许您可​​以从上面的脚本中传递您需要的任何数据)并对数据执行任何您需要执行的操作,并将数据推送到客户端。

    【讨论】:

      【解决方案2】:

      如果您已经设置了套接字侦听器,那么您只需要编辑负责插入新 mysql 记录的 php 脚本,以便在插入成功时向套接字发送信号。或者我不明白你的问题?

      【讨论】:

      • 你很明白。它是一个共享数据库,它不是由脚本插入的,而是由我无法控制的软件插入的。但我可以用数据库做任何我想做的事
      • 嗯...如果您只控制数据库服务器,它可能会非常难看。一个想法(可能很疯狂)是让 php 套接字在与 MYSQL 正在侦听的端口相同的端口上侦听(它们都必须设置为 UDP 以便他们可以共享端口)......然后你会放一个PHP脚本的小延迟,以便插入可以完成,然后它会触发。不过,这有点绕...会很快,因为桌子很小)
      • 是的,如果我能说的话,我试图避免破坏实时部分的王冠工作。我唯一的控制是软件用来插入记录的 sql 查询。只是纯 sql。
      猜你喜欢
      • 2013-07-07
      • 2021-11-17
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 2021-01-15
      • 2012-03-26
      • 2011-12-09
      • 1970-01-01
      相关资源
      最近更新 更多