funbox/smppex

smppex vs oserl

chemeris opened this issue · 2 comments

Just wondering - why a completely new library, what is the benefit comparing to existing libs like oserl?
We're looking for a good SMPP library in Erlang/Elixir, so I'm looking at available options.

Hello!

In our company we use Erlang widely, and when we started working with SMPP oserlhelped us a lot. By now we have been working with SMPP for several years and had some serious issues with oserl.

  1. oserl is dead. Nobody contributes to it for many years.
  2. It has several critical bugs including session deadlocks. The most critical core bugs are fixed in our fork https://github.com/funbox/oserl since they are still not merged into "original" github repo https://github.com/iamaleksey/oserl/pulls. Our repo also contains branches with support of newer Erlang versions.
  3. It has "hardcoded" SMPP 5.0 support while most SMSC-s we work with support only SMPP 3.4, SMPP 5.0 isn't popular.
  4. oserl has some critical architectural issues, mostly concerning MC functionality. All sessions opened by MC are handled by a single gen_server, this often becomes a bottleneck and makes different sessions dependent. Also, oserl sessions have weird RPS control mechanism which is very CPU consuming.

SMPPEX is intended to be a full featured replacement for oserl in Elixir projects. It's core feature is simplicity, and by simplicity I mean both code simplicity and simplicity of use.

  • The library does not have much TCP handling or session management functionality, since it is based on ranch. Consequently SMPP sessions are completely parallel.
  • SMPP session is symmetric and is implemented as ranch_protocol behaviour.
  • The library includes an easy and ready to use SMPP client (SMPP.ESME.Sync) which has capabilities of synchronous SMS sending and do not require implementing ESME behavior. There is also an SMPP testing tool smppsend(https://github.com/savonarola/smppsend) based on this client.

The most serious disadvantage of SMPPEX is the lack of documentation, but I'm working on it right now (just after I have implemented the main functionality and covered it with tests).

Thank you for the explanation. We'll give smppex a shot here as well.

Btw, I looked at the code close over the weekend - It's quite nicely designed.