… | |
… | |
708 | |
708 | |
709 | Erlang makes few guarantees on messages delivery - messages can get lost |
709 | Erlang makes few guarantees on messages delivery - messages can get lost |
710 | without any of the processes realising it (i.e. you send messages a, b, |
710 | without any of the processes realising it (i.e. you send messages a, b, |
711 | and c, and the other side only receives messages a and c). |
711 | and c, and the other side only receives messages a and c). |
712 | |
712 | |
713 | AEMP guarantees correct ordering, and the guarantee that there are no |
713 | AEMP guarantees correct ordering, and the guarantee that after one message |
714 | holes in the message sequence. |
714 | is lost, all following ones sent to the same port are lost as well, until |
715 | |
715 | monitoring raises an error, so there are no silent "holes" in the message |
716 | =item * In Erlang, processes can be declared dead and later be found to be |
716 | sequence. |
717 | alive. |
|
|
718 | |
|
|
719 | In Erlang it can happen that a monitored process is declared dead and |
|
|
720 | linked processes get killed, but later it turns out that the process is |
|
|
721 | still alive - and can receive messages. |
|
|
722 | |
|
|
723 | In AEMP, when port monitoring detects a port as dead, then that port will |
|
|
724 | eventually be killed - it cannot happen that a node detects a port as dead |
|
|
725 | and then later sends messages to it, finding it is still alive. |
|
|
726 | |
717 | |
727 | =item * Erlang can send messages to the wrong port, AEMP does not. |
718 | =item * Erlang can send messages to the wrong port, AEMP does not. |
728 | |
719 | |
729 | In Erlang it is quite likely that a node that restarts reuses a process ID |
720 | In Erlang it is quite likely that a node that restarts reuses a process ID |
730 | known to other nodes for a completely different process, causing messages |
721 | known to other nodes for a completely different process, causing messages |
… | |
… | |
734 | around in the network will not be sent to an unrelated port. |
725 | around in the network will not be sent to an unrelated port. |
735 | |
726 | |
736 | =item * Erlang uses unprotected connections, AEMP uses secure |
727 | =item * Erlang uses unprotected connections, AEMP uses secure |
737 | authentication and can use TLS. |
728 | authentication and can use TLS. |
738 | |
729 | |
739 | AEMP can use a proven protocol - SSL/TLS - to protect connections and |
730 | AEMP can use a proven protocol - TLS - to protect connections and |
740 | securely authenticate nodes. |
731 | securely authenticate nodes. |
741 | |
732 | |
742 | =item * The AEMP protocol is optimised for both text-based and binary |
733 | =item * The AEMP protocol is optimised for both text-based and binary |
743 | communications. |
734 | communications. |
744 | |
735 | |
745 | The AEMP protocol, unlike the Erlang protocol, supports both |
736 | The AEMP protocol, unlike the Erlang protocol, supports both programming |
746 | language-independent text-only protocols (good for debugging) and binary, |
737 | language independent text-only protocols (good for debugging) and binary, |
747 | language-specific serialisers (e.g. Storable). |
738 | language-specific serialisers (e.g. Storable). |
748 | |
739 | |
749 | It has also been carefully designed to be implementable in other languages |
740 | It has also been carefully designed to be implementable in other languages |
750 | with a minimum of work while gracefully degrading fucntionality to make the |
741 | with a minimum of work while gracefully degrading functionality to make the |
751 | protocol simple. |
742 | protocol simple. |
752 | |
743 | |
753 | =item * AEMP has more flexible monitoring options than Erlang. |
744 | =item * AEMP has more flexible monitoring options than Erlang. |
754 | |
745 | |
755 | In Erlang, you can chose to receive I<all> exit signals as messages |
746 | In Erlang, you can chose to receive I<all> exit signals as messages |