我正在尝试进行进程间通信,因为我无法弄清楚如何在Windows下使用命名管道,我以为我会使用网络套接字.一切都在当地发生.服务器能够在单独的进程中启动从属服务器并侦听某个端口.奴隶完成他们的工作并将结果提交给主人.我如何确定哪个端口可用?我想我不能听80或21端口?
我正在使用Python,如果这会减少选择.
谢谢!
我正在寻找一种方法,如何在浏览器中的多个选项卡或窗口之间进行通信(在同一个域上,而不是CORS),而不留痕迹.有几个解决方案:
第一个可能是最糟糕的解决方案 - 你需要从当前窗口打开一个窗口,然后只要你打开窗户就可以进行通信.如果您在任何窗口中重新加载页面,则很可能会丢失通信.
第二种方法,使用postMessage,可能启用跨源通信,但遇到与第一种方法相同的问题.您需要维护一个窗口对象.
第三种方式,使用cookie,在浏览器中存储一些数据,这可以有效地看起来像向同一域上的所有窗口发送消息,但问题是你永远不知道所有标签是否已经读过"消息"打扫干净.您必须实现某种超时以定期读取cookie.此外,您受限于最大cookie长度,即4KB.
使用localStorage的第四种解决方案似乎克服了cookie的限制,甚至可以使用事件进行监听.接受的答案中描述了如何使用它.
编辑2018:接受的答案仍然有效,但现代浏览器有一个更新的解决方案,使用BroadcastChannel.有关如何使用BroadcastChannel在选项卡之间轻松传输消息的简单示例,请参阅其他答案.
Node.js是我们的Web项目的完美匹配,但我们更喜欢Python的计算任务很少.我们还有一个Python代码.我们高度关注速度,如何以异步非阻塞方式从node.js调用Python"worker"的最优雅方式是什么?
我如何编写一个简单的 - 最简单的工作 - 测试应用程序,说明如何使用IPC /命名管道?
例如,如何编写一个控制台应用程序,程序1将"Hello World"写入程序2,程序2接收消息并将"Roger That"回复给程序1.
在Linux中,当程序(可能有多个线程)收到SIGTERM或SIGHUP等信号时会发生什么?
哪个线程截获信号?多个线程可以获得相同的信号吗?是否有专门用于处理信号的特殊线程?如果没有,那么处理信号的线程内部会发生什么?信号处理程序例程结束后如何恢复执行?
我有一个Java应用程序,通过TCP套接字连接到用C/C++开发的"服务器".
app和server都运行在同一台机器上,一个Solaris机箱(但我们最终考虑迁移到Linux).交换的数据类型是简单的消息(登录,登录ACK,然后客户端要求的东西,服务器回复).每条消息长约300字节.
目前我们正在使用套接字,一切正常,但我正在寻找一种更快的方式来交换数据(更低的延迟),使用IPC方法.
我一直在研究网络,并提出了以下技术的参考:
但我无法找到他们各自的性能适当的分析,无论是如何实现它们在Java和C/C++(这样他们可以互相交谈),也许除了管我能想象该怎么办.
在这种情况下,任何人都可以评论每种方法的表现和可行性吗?任何有用的实现信息的指针/链接?
编辑/更新
按照我在这里的评论和答案,我发现了有关Unix域套接字的信息,它似乎是通过管道构建的,并且可以节省整个TCP堆栈.它是特定于平台的,因此我计划使用JNI或者juds或junixsocket进行测试.
接下来可能的步骤是直接实现管道,然后共享内存,虽然我已被警告过额外的复杂程度......
谢谢你的帮助
每个人似乎都说命名管道比插座IPC快.他们快多快了?我更喜欢使用套接字,因为它们可以进行双向通信并且非常灵活,但如果数量相当大,则会选择速度而不是灵活性.
我应该使用命名管道或.NET Remoting与我的机器上正在运行的进程通信吗?
System V IPC和之间有什么区别POSIX IPC?Unix/Linux提供了大量的IPC:管道,套接字,共享内存,dbus,消息队列......
每种应用最合适的应用是什么?它们的表现如何?