Server
- class compas.rpc.Server(addr, requestHandler=<class 'xmlrpc.server.SimpleXMLRPCRequestHandler'>, logRequests=True, allow_none=False, encoding=None, bind_and_activate=True, use_builtin_types=False)[source]
Bases:
xmlrpc.server.SimpleXMLRPCServer
Version of a SimpleXMLRPCServer that can be cleanly terminated from the client side.
Examples
# service.py from compas.rpc import Server from compas.rpc import Dispatcher class DefaultService(Dispatcher): pass if __name__ == '__main__': server = Server(("localhost", 8888)) server.register_function(server.ping) server.register_function(server.remote_shutdown) server.register_instance(DefaultService()) server.serve_forever()
Notes
This class has to be used by a service to start the XMLRPC server in a way that can be pinged to check if the server is live, and can be cleanly terminated.
Methods
close_request
(request)Called to clean up an individual request.
fileno
()Return socket file number.
finish_request
(request, client_address)Finish one request by instantiating RequestHandlerClass.
Get the request and client address from the socket.
handle_error
(request, client_address)Handle an error gracefully.
Handle one request, possibly blocking.
Called if no new request arrives within self.timeout.
ping
()Simple function used to check if a remote server can be reached.
process_request
(request, client_address)Call finish_request.
register_function
([function, name])Registers a function to respond to XML-RPC requests.
register_instance
(instance[, allow_dotted_names])Registers an instance to respond to XML-RPC requests.
Registers the XML-RPC introspection methods in the system namespace.
Registers the XML-RPC multicall method in the system namespace.
serve_forever
([poll_interval])Handle one request at a time until shutdown.
Called by constructor to activate the server.
Called by constructor to bind the socket.
Called to clean-up the server.
Called by the serve_forever() loop.
shutdown
()Stops the serve_forever loop.
shutdown_request
(request)Called to shutdown and close an individual request.
system.listMethods() => [‘add’, ‘subtract’, ‘multiple’]
system_methodHelp
(method_name)system.methodHelp(‘add’) => “Adds two integers together”
system_methodSignature
(method_name)system.methodSignature(‘add’) => [double, int, int]
system_multicall
(call_list)system.multicall([{‘methodName’: ‘add’, ‘params’: [2, 2]}, …]) => [[4], …]
verify_request
(request, client_address)Verify the request.