python - zeromq: TypeError: string indices must be integers, not str -
i want found publish subscribe communication between machines.
the 2 machines, have, ryu-primary , ryu-secondary
the steps follow in each of machines follows.
in initializer ryu-primary (ip address 192.168.241.131)
self.context = zmq.context() self.sub_socket = self.context.socket(zmq.sub) self.pub_socket = self.context.socket(zmq.pub) self.pub_port = 5566 self.sub_port = 5566 def establish_zmq_connection(self): # socket talk server print( "connection ryu-secondary..." ) self.sub_socket.connect( "tcp://192.168.241.132:%s" % self.sub_port ) def listen_zmq_connection(self): print( 'listen zmq connection' ) self.pub_socket.bind( "tcp://*:%s" % self.pub_port ) def recieve_messages(self): while true: try: string = self.sub_socket.recv( flags=zmq.noblock ) print( 'flow mod messages recieved {}'.format(string) ) homecoming string except zmq.zmqerror: break def push_messages(self,msg): self.pub_socket.send( "%s" % (msg) ) from ryu-secondary (ip address - 192.168.241.132)
in initializer
self.context = zmq.context() self.sub_socket = self.context.socket(zmq.sub) self.pub_socket = self.context.socket(zmq.pub) self.pub_port = 5566 self.sub_port = 5566 def establish_zmq_connection(self): # socket talk server print( "connection ryu-secondary..." ) self.sub_socket.connect( "tcp://192.168.241.131:%s" % self.sub_port ) def listen_zmq_connection(self): print( 'listen zmq connection' ) self.pub_socket.bind( "tcp://*:%s" % self.pub_port ) def recieve_messages(self): while true: try: string = self.sub_socket.recv( flags=zmq.noblock ) print( 'flow mod messages recieved {}'.format(string) ) homecoming string except zmq.zmqerror: break def push_messages(self,msg): print( 'pushing message publish socket' ) self.pub_socket.send( "%s" % (msg) ) these functions have.
i calling on ryu-secondary:
establish_zmq_connections() push_messages() on ryu-primary, when phone call
listen_zmq_connection() recieve_messages() after subscribing types of messages using .setsockopt( zmq.subscribe = '')
however message trying send of next type.
msg = {'in_port':in_port,'dst':dst,'actions':actions} self.push_messages(msg) however on other side (recieve_messages() next error when this
flow_mod = recieve_messages() flow_mod['in_port'] flow_mod['dst'] flow_mod['actions'] typeerror: string indices must integers, not str
msg python dict, sending (and receiving) messages formatted strings. easiest thing serialize msg json format, send string, load received string dict again. then, , then, able access keys , values properly. should work (make sure import json somewhere above):
# on sending end msg = {'in_port':in_port,'dst':dst,'actions':actions} msg_string = json.dumps(msg) self.push_messages(msg) # on receiving end payload = receive_messages() message = json.loads(payload) you can find total docs json module here (for python 2) , here python 3.
python ipc zeromq
No comments:
Post a Comment