您可以使用redis(例如发布/订阅功能)作为进程间通信工具。
Redis 是一种开源(BSD 许可)的内存数据结构
store,用作数据库、缓存和消息代理。它支持数据
结构,例如字符串、哈希、列表、集合、排序集合
范围查询、位图、超日志和地理空间索引
半径查询。 Redis 内置了复制、Lua 脚本、LRU
驱逐、事务和不同级别的磁盘持久性,
并通过 Redis Sentinel 和自动提供高可用性
使用 Redis 集群进行分区。
除了通过 redis 进行 IPC 之外,您还可以将它用作分布式键值数据库 - redis 恕我直言的一大优势。
另一种选择 - zeromq - 最著名的进程间通信工具之一。互联网上有很多关于它的教程和文档。原导:http://zguide.zeromq.org/page:all
ØMQ(也称为 ZeroMQ、0MQ 或 zmq)看起来像一个可嵌入的
网络库,但就像一个并发框架。它给你
跨各种传输传输原子消息的套接字,例如
进程内、进程间、TCP 和多播。您可以连接套接字
N-to-N 模式,如扇出、发布-订阅、任务分配和
请求-回复。它的速度足以成为集群的结构
产品。它的异步 I/O 模型为您提供可扩展的多核
应用程序,构建为异步消息处理任务。它有一个
语言 API 的分数并在大多数操作系统上运行。 ØMQ 来自
iMatix 并且是 LGPLv3 开源。
python 上的 Hello world 服务器和客户端:https://learning-0mq-with-pyzmq.readthedocs.org/en/latest/pyzmq/patterns/client_server.html
官方指南中的PHP服务器和python客户端的简单示例:
PHP 服务器:
<?php
/*
* Hello World server
* Binds REP socket to tcp://*:5555
* Expects "Hello" from client, replies with "World"
* @author Ian Barber <ian(dot)barber(at)gmail(dot)com>
*/
$context = new ZMQContext(1);
// Socket to talk to clients
$responder = new ZMQSocket($context, ZMQ::SOCKET_REP);
$responder->bind("tcp://*:5555");
while (true) {
// Wait for next request from client
$request = $responder->recv();
printf ("Received request: [%s]\n", $request);
// Do some 'work'
sleep (1);
// Send reply back to client
$responder->send("World");
}
Python 中的 Hello World 客户端:
#
# Hello World client in Python
# Connects REQ socket to tcp://localhost:5555
# Sends "Hello" to server, expects "World" back
#
import zmq
context = zmq.Context()
# Socket to talk to server
print "Connecting to hello world server…"
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")
# Do 10 requests, waiting each time for a response
for request in range(10):
print "Sending request %s …" % request
socket.send("Hello")
# Get the reply.
message = socket.recv()
print "Received reply %s [ %s ]" % (request, message)