gpt4 book ai didi

perl - 如何在Perl脚本的两个分支部分之间建立IP通信

转载 作者:行者123 更新时间:2023-12-03 11:53:14 24 4
gpt4 key购买 nike

我必须编写一个程序,为多个客户端同时访问多个资源(网络摄像头)提供服务。

示例:客户A和客户B都要求两个平移摄像机A和B的当前位置。
我必须避免客户直接与该摄像机讲话(因为可能有很多客户)
所以我的想法是为每个客户端(通过套接字连接)和每个cam都有一个进程。

如果客户端请求凸轮A的位置,则程序将为该凸轮派生新进程,该进程将反复轮询凸轮位置10秒钟,然后退出。在此10秒钟内,此cam-A流程应满足来自任何客户的每个职位请求。

问题是:cam进程如何与客户端进程通信?
我幼稚的方法是使用全局变量(camA-posX,camA-posY,camB-posX,camB-posY,...),这些全局变量会写入cam进程并从中读取客户端进程。我什至不知道分支过程之间的全局变量是否完全可能。

我的第二种方法是使用类似于perlipc/Safe Pipe Opens的管道,但这仅涉及父子通信。

另一个问题:必须有一个人(父进程?)来决定我是否必须派生一个新的cam进程或它是否仍在运行。

也许最好编写两个程序(使用第二种方法),一个程序用于客户端,一个程序用于相机,它们通过一个套接字相互通信。

如果凸轮和客户端的数量增加,甚至可能需要缩放整个对象以分配负载。

最佳答案

  • 您不能使用全局变量。一旦进程 fork ,它们将不再共享内存空间,因此全局变量在它们之间是不同的。您只能使用线程来执行此操作,并且需要非常小心地使用共享内存进行通信(就像线程并发编程中的任何事情一样:)
  • 对于较低级别的IPC,请使用 IPC::Msg
  • 老实说,如果您需要扩展,我会建议您在IPC框外查看,并使用真实的数据库来管理您的通信。

    它可以是关系数据库,也可以是noSQL,只要它是保证事务原子性的数据库即可。 mySQL应该可以正常工作。
  • 另一个类似的方法(如果DB有点过分的话)是使用消息传递队列,如下所述:“A queueing system for Perl
  • 讨论了其他一些解决方案:
  • What's the fastest Perl IPC/message queue for a single machine?
  • Message queues in Perl, PHP, Python列出了消息队列的几个选项。
  • 关于perl - 如何在Perl脚本的两个分支部分之间建立IP通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17814238/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com