| 1 | | "NewPB" is the name for the next-generation RPC protocol, intended to replace Perspective Broker. It has been under development (on and off) by Brian Warner for several years. |
| 2 | | |
| 3 | | The two primary responsibilities of an RPC protocol are to: |
| 4 | | |
| 5 | | 1. serialize an object graph, and reconstruct a useful equivalent on the remote side |
| 6 | | 1. allow the holder of a !RemoteReference in one process to invoke methods on a Referenceable in a different one |
| 7 | | |
| 8 | | In addition, there are details like object naming, connection establishment, controlling object serialization, reference lifetime, and error reporting. |
| 9 | | |
| 10 | | == New features == |
| 11 | | (relative to oldpb, aka twisted.spread) |
| 12 | | |
| 13 | | * all methods take keyword arguments instead of positional arguments |
| 14 | | * most inert Python types are serializable, including unicode and sets |
| 15 | | * clients and servers are implemented as Services, which share connections when possible and are easy to shut down |
| 16 | | * links are encrypted/authenticated by default (using SSL) |
| 17 | | * all objects are accessed through secure/unguessable "PB-URLs" |
| 18 | | * explicitly published objects can be accessed through well-known PB-URLs |
| 19 | | * you can declare method signatures (with "constraints", either in Interface classes or as method attribute/decorators) |
| 20 | | * this enables defenses against resource-consumption DoS attacks, including stack-frame-exhaustion attacks |
| 21 | | * you can ask the deserializer about your current maximum memory/stackframe exposure, based upon what objects are visible and |
| 22 | | what |
| 23 | | * serializers for third-party classes can be registered using Adapters |
| 24 | | * serializers are more "streaming" than in oldpb |
| 25 | | * serializers can pause themselves, deferring serialization until later |
| 26 | | * serializers can be paused when the network pipe is full |
| 27 | | * newpb is architected to make it possible to rewrite serializers/deserializers in C, for speed |
| 28 | | * object graph depth is limited by available heap memory, not available stack depth |
| 29 | | |
| 30 | | == Show Me The Code == |
| 31 | | |
| 32 | | The first release is available in my [http://twistedmatrix.com/~warner/newpb/ home directory]: [http://twistedmatrix.com/~warner/newpb/TwistedPb2-0.0.1.tar.bz2 TwistedPb2-0.0.1.tar.bz2]. This is an alpha release, more of a technology preview than anything else, but should serve to give potential users an idea of what to expect from newpb. |
| 33 | | |
| 34 | | The latest NewPB code lives in SVN trunk, in the twisted.pb module (source:trunk/twisted/pb). The documentation is in source:trunk/doc/pb and includes both the protocol specification and a short user's manual. It is currently only available via SVN and as a separate module. Some day, it will probably be shipped as part of the "Twisted-Core" distribution, but only after the protocol and code have stabilized a bit. |
| 35 | | |
| 36 | | == Status == |
| 37 | | |
| 38 | | NewPB is not yet ready for production use. source:trunk/doc/pb/newpb-todo.txt and source:trunk/doc/pb/newpb-jobs.txt contain some of the things that need finishing before it will be ready. Connection negotiation needs to be changed to use variable-length certificate digests and variable-length object names, various questions about making objects "giftable" by default or not need to be answered and implemented, and we need to acquire operational experience with newpb as a whole to think about usability. |
| 39 | | |
| | 1 | !NewPB has been renamed to FoolsCap |