[Python]zeromq:socket request/receive, 发布/订阅消息, 进程间通讯

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值