问题标签 [ipc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
6204 浏览

python - 如何让两个python程序交互?

我在一个程序中有一个 HTTP 服务器,在另一个程序中有我的基本应用程序。它们都是循环,所以我不知道如何:

  1. 编写一个脚本来启动应用程序,然后是 HTTP 服务器;
  2. 使这些程序在运行中交换数据。

这些事情通常是怎么做的?我真的很喜欢 Python 解决方案,因为我的脚本是用 Python 编写的。

  1. 用户是否发出 http 请求来查询应用程序以获取某些数据并返回结果?是的

  2. 应用程序是否收集数据并将其存储在某个地方?该应用程序和 HTTP 服务器都使用 SQLite 数据库。但是 DB 可能不同。

0 投票
4 回答
2145 浏览

ipc - RE:Posix 和 System V IPC

  1. 消息队列、共享内存和信号量中哪个 IPC 最容易转换为网络 IPC,哪个最难。

  2. 将 System V 共享内存转换为网络 IPC 或将 Posix 共享内存转换为网络 IPC 会更容易吗

0 投票
1 回答
2423 浏览

ipc - 进程间通信

使用文件进行进程间通信的优缺点是什么?让我介绍一下我提出这个问题的背景。

问题是具有一些约束的经典生产者消费者问题。生产者是一组运行在机器集群上的协作进程,并使用广播相互通信。每个进程都有自己知道的本地用户,并通过上述广播机制让其他进程知道他们。到目前为止,正在广播/共享的状态信息还没有被持久化,但现在它需要被持久化。

该系统已经在生产环境中运行多年,现在支持成千上万的用户,人们可以理解的是,人们非常担心为此添加任何额外的依赖项以增加对持久性的支持。我们选择的路径是在现有进程中生成一个新线程,将本地流量写入文件系统上的文件,然后由新进程读取(我们称之为消费者)并持久化。我们看到这种方法的优点是:

  1. 我们免费获得持久性。如果新进程出现问题,我们在将其写入文件系统时不会丢失任何本地流量。只要消费者知道它在哪里停止,只要它出现,它就可以开始处理数据。
  2. 使用队列库和普通的旧 unix 文件 IO 没有学习曲线。
  3. 最大的优点是我们根本不影响当前的生产者进程,除了文件写入的新线程。

这种方法的一些问题是:

  1. 文件锁定和争用及其对性能的影响。
  2. 确保写入缓冲区已刷新,并且生产者仅在将完整事件写入文件后才释放文件锁。消费者应该阅读不完整的记录。

想法?这种方法是否幼稚,我们是否应该为使用现成的持久队列库的加速时间支付初始成本?这里的要点是我们希望对当前进程产生最小的影响并且不添加任何依赖项。

0 投票
4 回答
352 浏览

language-agnostic - 通知非 Web 应用程序有关网页更改的最佳方式是什么?

假设我有两个应用程序必须在一定程度上协同工作。

  1. 一个 Web 应用程序(PHP、Ruby on Rails,...)
  2. 桌面应用程序(Java、C++、...)

必须从 Web 应用程序通知桌面应用程序,并且发送和接收通知之间的延迟必须很短。(< 10 秒)

有什么可能的方法来做到这一点?我可以考虑以 10 秒的间隔进行轮询,但如果必须通知许多桌面应用程序,那将产生大量流量。在 LAN 上,我会使用 UDP 广播,但不幸的是,这在这里是不可能的......

我很感激你能给我的任何想法。

0 投票
4 回答
11019 浏览

c++ - DuplicateHandle(),在第一个或第二个过程中使用?

Windows API DuplicateHandle() http://msdn.microsoft.com/en-us/library/ms724251(VS.85).aspx 需要复制对象句柄以及原始进程和另一个进程的句柄你想使用重复的句柄。

我假设如果我有两个 UNRELATED 进程,只要我有所需的句柄可用,我可以在其中一个中调用 DuplicateHandle() 吗?

我的问题是关于使用管道在两个进程之间进行通信以通过事件实现这一点。

在第一个过程中我 CreateEvent()。现在我想在第二个过程中使用 WaitForSingleObject() 。

如果我尝试在第一个进程中复制句柄,我需要先通过管道将第二个进程句柄发送到第一个进程,复制句柄然后将句柄发送到第二个进程?

或者,我可以首先将第一个进程句柄和事件句柄发送到第二个进程,然后在那里复制它。

我有理由选择其中一个吗?

要添加一个皱纹,事件句柄实际上是从实际调用第一个进程(这是一个 CGI 应用程序)的父进程继承的。如果该事件句柄是使用 HANDLE_DO_NOT_DUPLICATE (类似的东西)创建的,那么我实际上可以使用 DuplicateHandle() 为第二个进程复制它吗?

回复:

好吧,我可以在第一个进程中创建一个新的 NAMED 事件,并按照建议在第二个进程中找到它,但是我试图复制在第一个进程的父进程中创建的事件并将其转发给第二个进程。此事件不是命名事件,因此我需要使用 DuplicateHandle()。

我正在为 IPC 使用管道。我意识到 DuplicateHandle() 必须在第一个进程中调用,因为事件句柄在发送到第二个进程时脱离了上下文。

第二个过程使用上面详细说明的 DuplicateHandle() 转换其句柄

hProcPseudo= 4294967295

h进程= 152

然后我通过命名管道将此进程句柄传递给第一个进程。在第一个过程(事件句柄有效)中,我调用 Duplicate handle:

不幸的是,我得到了错误:

DuplicateHandle hPipeFCGI GetLastError= 6 - 句柄无效。

进一步的测试(替换 hFirstProcess)显示是 hSecondProc 无效!??

大奥秘。

0 投票
5 回答
9391 浏览

jvm - 是否可以在 Java 中进行 InterProcess 通信?

我有两个 Java 程序,每个程序都在自己的 JVM 实例中运行?他们可以使用任何 IPC 技术(如共享内存或管道)相互通信吗?有没有办法做到这一点?

0 投票
3 回答
537 浏览

linux - linux上的msemaphore?

AIX(如果有人关心的话,还有HPUX)有一个很好的小特性,叫做msemaphores,它可以很容易地同步多个进程共享的内存映射文件的粒度片段(例如记录)。有人知道linux中有类似的东西吗?

为了清楚起见,msemaphore 函数通过此处的相关链接进行描述。

0 投票
2 回答
508 浏览

.net - 在 .NET 中实现 IPC 总线的最佳机制?

我有几个应用程序想通过数据总线进行本地通信。

理想情况下:

  • 他们上网时会说话和倾听
  • 这种通信方式不会有“所有者”。
  • 无需安装额外的组件(即消息队列)
  • 如果没有需要打开的端口就好了

您认为做到这一点的最佳技术是什么?

有没有办法将 WCF 用于数据总线?

0 投票
2 回答
243 浏览

c++ - 用于本地 IPC 的基于内存的数据服务器

我将运行一个应用程序,每次运行时需要大约 200MB 的市场数据。这些天来存储在内存中的数据量很小,所以为了速度,这就是我想要做的。

在一天的会话过程中,我可能会一遍又一遍地运行、重新运行、重写和重新运行等一个或多个应用程序。

所以,问题是如何整天将数据保存在内存中,这样即使应用程序崩溃,我也不必通过打开磁盘上的数据文件并重新加载数据来重新加载数据?

我最初的想法是编写一个数据服务器应用程序,它只会将数据读入共享内存,以便它可以使用。如果我这样做,我想我可以通过调用为 IPC 使用内存映射

创建文件()

创建文件映射()

MapViewOfFile()

有更好的 IPC/方法吗?

0 投票
2 回答
1892 浏览

sockets - 哪些进程间通信方法适用于终端服务器?

在终端服务器会话中,某些标准 IPC 技术可能无法像在单用户环境中那样工作,因为所需的资源没有被虚拟化

例如,TCP/IP 端口没有虚拟化,因此不同会话中的应用程序尝试侦听同一端口会导致端口冲突。

在同一用户会话中运行的应用程序需要交互的终端服务器环境中,哪种 IPC 技术可以工作?

  • 消息(WM_COPYDATA)?
  • 命名管道?
  • DDE?
  • 内存映射文件?