[Mod] add unbind socket in server stop method

This commit is contained in:
vn.py 2019-07-02 09:32:46 +08:00
parent c41f84de55
commit 01122f013d
3 changed files with 25 additions and 20 deletions

View File

@ -25,7 +25,7 @@ class TestClient(RpcClient):
if __name__ == "__main__": if __name__ == "__main__":
req_address = "tcp://localhost:2014" req_address = "tcp://localhost:2014"
sub_address = "tcp://localhost:0602" sub_address = "tcp://localhost:4102"
tc = TestClient(req_address, sub_address) tc = TestClient(req_address, sub_address)
tc.subscribe_topic("") tc.subscribe_topic("")

View File

@ -10,11 +10,11 @@ class TestServer(RpcServer):
Test RpcServer Test RpcServer
""" """
def __init__(self, rep_address, pub_address): def __init__(self):
""" """
Constructor Constructor
""" """
super(TestServer, self).__init__(rep_address, pub_address) super(TestServer, self).__init__()
self.register(self.add) self.register(self.add)
@ -28,10 +28,10 @@ class TestServer(RpcServer):
if __name__ == "__main__": if __name__ == "__main__":
rep_address = "tcp://*:2014" rep_address = "tcp://*:2014"
pub_address = "tcp://*:0602" pub_address = "tcp://*:4102"
ts = TestServer(rep_address, pub_address) ts = TestServer()
ts.start() ts.start(rep_address, pub_address)
while 1: while 1:
content = f"current server time is {time()}" content = f"current server time is {time()}"

View File

@ -2,6 +2,7 @@ import threading
import traceback import traceback
import signal import signal
import zmq import zmq
from typing import Any, Callable
# Achieve Ctrl-c interrupt recv # Achieve Ctrl-c interrupt recv
@ -29,7 +30,7 @@ class RemoteException(Exception):
class RpcServer: class RpcServer:
"""""" """"""
def __init__(self, rep_address, pub_address): def __init__(self):
""" """
Constructor Constructor
""" """
@ -41,20 +42,22 @@ class RpcServer:
# Reply socket (Requestreply pattern) # Reply socket (Requestreply pattern)
self.__socket_rep = self.__context.socket(zmq.REP) self.__socket_rep = self.__context.socket(zmq.REP)
self.__socket_rep.bind(rep_address)
# Publish socket (Publishsubscribe pattern) # Publish socket (Publishsubscribe pattern)
self.__socket_pub = self.__context.socket(zmq.PUB) self.__socket_pub = self.__context.socket(zmq.PUB)
self.__socket_pub.bind(pub_address)
# Worker thread related # Worker thread related
self.__active = False # RpcServer status self.__active = False # RpcServer status
self.__thread = threading.Thread(target=self.run) # RpcServer thread self.__thread = threading.Thread(target=self.run) # RpcServer thread
def start(self): def start(self, rep_address: str, pub_address: str):
""" """
Start RpcServer Start RpcServer
""" """
# Bind socket address
self.__socket_rep.bind(rep_address)
self.__socket_pub.bind(pub_address)
# Start RpcServer status # Start RpcServer status
self.__active = True self.__active = True
@ -62,7 +65,7 @@ class RpcServer:
if not self.__thread.isAlive(): if not self.__thread.isAlive():
self.__thread.start() self.__thread.start()
def stop(self, join=False): def stop(self, join: bool = False):
""" """
Stop RpcServer Stop RpcServer
""" """
@ -73,6 +76,10 @@ class RpcServer:
if join and self.__thread.isAlive(): if join and self.__thread.isAlive():
self.__thread.join() self.__thread.join()
# Unbind socket address
self.__socket_pub.unbind(self.__socket_pub.LAST_ENDPOINT)
self.__socket_rep.unbind(self.__socket_rep.LAST_ENDPOINT)
def run(self): def run(self):
""" """
Run RpcServer functions Run RpcServer functions
@ -99,13 +106,13 @@ class RpcServer:
# send callable response by Reply socket # send callable response by Reply socket
self.__socket_rep.send_pyobj(rep) self.__socket_rep.send_pyobj(rep)
def publish(self, topic, data): def publish(self, topic: str, data: Any):
""" """
Publish data Publish data
""" """
self.__socket_pub.send_pyobj([topic, data]) self.__socket_pub.send_pyobj([topic, data])
def register(self, func): def register(self, func: Callable):
""" """
Register function Register function
""" """
@ -115,10 +122,8 @@ class RpcServer:
class RpcClient: class RpcClient:
"""""" """"""
def __init__(self, req_address, sub_address): def __init__(self, req_address: str, sub_address: str):
"""Constructor""" """Constructor"""
super(RpcClient, self).__init__()
# zmq port related # zmq port related
self.__req_address = req_address self.__req_address = req_address
self.__sub_address = sub_address self.__sub_address = sub_address
@ -134,7 +139,7 @@ class RpcClient:
self.__thread = threading.Thread( self.__thread = threading.Thread(
target=self.run) # RpcClient thread target=self.run) # RpcClient thread
def __getattr__(self, name): def __getattr__(self, name: str):
""" """
Realize remote call function Realize remote call function
""" """
@ -172,7 +177,7 @@ class RpcClient:
def stop(self): def stop(self):
""" """
Stop RpcClient Stop RpcClient
""" """
# Stop RpcClient status # Stop RpcClient status
self.__active = False self.__active = False
@ -196,13 +201,13 @@ class RpcClient:
# Process data by callable function # Process data by callable function
self.callback(topic, data) self.callback(topic, data)
def callback(self, topic, data): def callback(self, topic: str, data: Any):
""" """
Callable function Callable function
""" """
raise NotImplementedError raise NotImplementedError
def subscribe_topic(self, topic): def subscribe_topic(self, topic: str):
""" """
Subscribe data Subscribe data
""" """