[Python]zeromq:socket request/receive, 发布/订阅消息, 进程间通讯
2016-06-07 13:42
246 查看
Request/Response
Server:
import zmq context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://*:5555") while True: message = socket.recv() print "Received request: ", message socket.send('Message from server...received')
Client:
import zmq context = zmq.Context() socket = context.socket(zmq.REQ) socket.connect("tcp://localhost:5555") print "Sending request ..." socket.send ("Hello") message = socket.recv() print message
Single Part
Publish server:
import time from random import choice from random import randrange import zmq stock_symbols = [u'谷歌', 'RAX', 'EMC', 'GOOG', 'AAPL', 'RHAT', 'AMZN'] context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://*:5555") while True: time.sleep(0.5) stock_symbol = choice(stock_symbols).encode('utf-8') stock_price = str(randrange(1, 100)).encode('utf-8') msg = "{0} ${1}".format(stock_symbol, stock_price) print "Sending Message: {0}".format(msg).decode('utf-8') socket.send(msg)
Client:
import zmq # 只订阅topic中的 topic = [u'谷歌', "GOOG", "RAX"] context = zmq.Context() socket = context.socket(zmq.SUB) for top in topic: socket.setsockopt(zmq.SUBSCRIBE, top.encode('utf-8')) socket.connect("tcp://127.0.0.1:5555") while True: msg = socket.recv() print msg.decode('utf-8')
Multiple Parts
Publish server:
import time from random import choice from random import randrange import zmq stock_symbols = [u'谷歌', 'RAX', 'EMC', 'GOOG', 'AAPL', 'RHAT', 'AMZN'] context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://*:5555") while True: time.sleep(0.5) stock_symbol = choice(stock_symbols).encode('utf-8') stock_price = str(randrange(1, 100)).encode('utf-8') msg = "{0} ${1}".format(stock_symbol, stock_price) print "Sending Message: {0}".format(msg).decode('utf-8') socket.send_multipart([stock_symbol, stock_price])
Client:
import zmq # 只订阅topic内的 topic = [u'谷歌', "GOOG", "RAX"] context = zmq.Context() socket = context.socket(zmq.SUB) for top in topic: socket.setsockopt(zmq.SUBSCRIBE, top.encode('utf-8')) socket.connect("tcp://127.0.0.1:5555") while True: topic, msg = socket.recv_multipart() print topic.decode('utf-8'), '$'+msg.decode('utf-8')
Json
Publish Server:
import time from random import choice from random import randrange import zmq import json stock_symbols = [u'谷歌', 'RAX', 'EMC', 'GOOG', 'AAPL', 'RHAT', 'AMZN'] context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://*:5555") while True: time.sleep(0.5) stock_symbol = choice(stock_symbols).encode('utf-8') stock_price = str(randrange(1, 100)).encode('utf-8') msg = {'Name': stock_symbol, 'Price': stock_price} print "Sending Message: {0}".format(msg).decode('utf-8') socket.send_json(msg)
Client:
import zmq context = zmq.Context() socket = context.socket(zmq.SUB) #不可过滤订阅内容 socket.setsockopt(zmq.SUBSCRIBE, '') socket.connect("tcp://127.0.0.1:5555") while True: msg = socket.recv_json() print msg
Multiple Parts 带Json,可过滤
Publish Server:
import time from random import choice from random import randrange import zmq import json stock_symbols = [u'谷歌', 'RAX', 'EMC', 'GOOG', 'AAPL', 'RHAT', 'AMZN'] context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://*:5555") while True: time.sleep(0.5) stock_symbol = choice(stock_symbols).encode('utf-8') stock_price = str(randrange(1, 100)).encode('utf-8') msg = {'Name': stock_symbol, 'Price': stock_price} print "Sending Message: {0}".format(msg).decode('utf-8') socket.send_multipart([stock_symbol, json.dumps(msg)])
Client:
import zmq, json topic = [u'谷歌', "GOOG", "RAX"] context = zmq.Context() socket = context.socket(zmq.SUB) for top in topic: socket.setsockopt(zmq.SUBSCRIBE, top.encode('utf-8')) socket.connect("tcp://127.0.0.1:5555") while True: topic, msg = socket.recv_multipart() print json.loads(msg)
转自:http://www.giantflyingsaucer.com/blog/?p=4967
相关文章推荐
- java-模拟tomcat服务器
- Linux socket 初步
- Android IPC进程间通讯机制
- java socket 注意的地方
- java socket 注意的地方
- C#基于socket模拟http请求的方法
- 简单的Ruby中的Socket编程教程
- Socket不能选择本地IP连接问题如何解决
- C#之Socket操作类实例解析
- 使用C#来编写一个异步的Socket服务器
- C#使用Socket快速判断数据库连接是否正常的方法
- 科学知识:理解socket
- websocket++简单使用及实例分析
- Android聊天工具基于socket实现
- php与flash as3 socket通信传送文件实现代码
- 解决time_wait强制关闭socket
- C#使用Socket上传并保存图片的方法
- PHP实现连接设备、通讯和发送命令的方法
- 深入php socket的讲解与实例分析
- Linux网络编程之UDP Socket程序示例