nng

nanomsg-next-generation -- light-weight brokerless messaging

MIT License

Downloads
42
Stars
3.8K
Committers
80

Bot releases are visible (Hide)

nng - Version 1.1.1

Published by gdamore almost 6 years ago

Version 1.1.1 patch release.

This fixes a few problems with 1.1.0.

  • The version number at build time was misreported as 1.0.1. It will now be 1.1.1.
  • Support for use in CMake scenarios involving add_subdirectory
  • Fix for the bug report URL if NNG crashes
  • Fix for a crash if a remote websocket peer sends PING requests
nng - Version 1.1.0

Published by gdamore almost 6 years ago

There are numerous bug fixes and improvements in this since 1.0.1.

DNS resolution is done asynchronously at dial time, leading to better self healing in the face of changing DNS records (and the possibility to use DNS for round-robin load balancing.)

Better peer identification is possible with IPC based transports.

The HTTP framework has better support for cancellation, and the HTTP client has a much friendlier ability to execute transactions. Additionally, the HTTP client can now support servers that insist on sending chunked transfer encodings.

The ZeroTier transport received a lot of work, so that it is far more stable, and supports more properties relating to peer identification. There are (undocumented) options to tune the local IP addresses used in ZeroTier as well. Also, the entire configuration process for ZeroTier is much saner.

A statistics API is available to obtain statistics about the application. Unfortunately, only a few statistics have been added -- more will be added in coming releases.

More modern CMake style is used to provide much more correct use from CMake projects - it should no longer be necessary to call find_package(Threads) or similar.

Better support for more platforms (older versions of Linux, Alpine Linux, QNX).

A variety of stability fixes and performance improvements.

A number of documentation improvements and corrections have been made as well.

nng - 1.1.0 Release Candidate

Published by gdamore almost 6 years ago

This is a release candidate for 1.1.0.

There are numerous bug fixes and improvements in this since 1.0.1.

DNS resolution is done asynchronously at dial time, leading to better self healing in the face of changing DNS records (and the possibility to use DNS for round-robin load balancing.)

Better peer identification is possible with IPC based transports.

The HTTP framework has better support for cancellation, and the HTTP client has a much friendlier ability to execute transactions. Additionally, the HTTP client can now support servers that insist on sending chunked transfer encodings.

The ZeroTier transport received a lot of work, so that it is far more stable, and supports more properties relating to peer identification. There are (undocumented) options to tune the local IP addresses used in ZeroTier as well. Also, the entire configuration process for ZeroTier is much saner.

A statistics API is available to obtain statistics about the application. Unfortunately, only a few statistics have been added -- more will be added in coming releases.

More modern CMake style is used to provide much more correct use from CMake projects - it should no longer be necessary to call find_package(Threads) or similar.

A number of documentation improvements have been made as well.

nng - Version 1.0.1

Published by gdamore over 6 years ago

This is a bug fix release, and contains fixes for several important bugs. Users of macOS and BSD operating systems should see a huge reduction in CPU overhead as a critical kqueue processing bug is fixed. The IPC transport also got a critical fix to eliminate accidental deletion of the socket incorrectly.

There is one feature that snuck in (my bad!) which is that it is now possible to customize the HTTP error page -- see nng_http_server_set_error_file() or nng_http_server_set_error_page() for details.

A few other minor bugs were fixed as well, including a leak in the URL, an inability to tune dialer reconnection timers individually.

More stabilization work and feature work is pending, but these issues are important enough that we felt it worthwhile to push this release out while we finish up the work on the other issues.

nng - Version 1.0.0

Published by gdamore over 6 years ago

This is the first "stable" release of NNG. While there are many more things to do in NNG, we are recommending users being transitioning to NNG away from nanomsg.

nng - 1.0.0 Release Candidate 1

Published by gdamore over 6 years ago

This is a release candidate. At this point we consider ourselves ready for 1.0.0 final release. This does have some changes in it, so we will wait a little bit before the final release:

Changes since beta.2:

  • Honors BUILD_SHARED_LIBS CMake setting (see below)
  • Support for Android added
  • Instructions for building with Xcode for iOS (no code changes were needed)
  • Support for enabling sanitizers (address, thread, memory, undefined) via NNG_SANITIZER
  • Fixes for bugs found with sanitizers (use-after-free, leaks)
  • Simplified synchronization primitives on POSIX (no fallback needed)
  • CMake exported target (easier integration within CMake projects) & demos
  • Shared library symbol visibility is reduced by default
  • Documentation updates (various) found during editing

Essentially this project should be easier to use, provided you have a sane CMake installation. It attempts to be a well-behaved citizen in CMake-land, so should be easier to nest into other projects.

The one very important change is that we use the platform-specific defaults to decide whether to build shared or static libraries, and only build either shared or static -- not both. The determination of which to build is driven by the BUILD_SHARED_LIBS macro, which is user-accessible via CMake. This is more closely aligned with usual CMake practice.

Also, if you were using our library to access private symbols, that is a no-no, and may not work anymore, as the shared library is now more careful to only export the symbols we have intended for external use. (Build and use a static library if you need to work around that, but you really should only be using the public symbols.) This was already the default behavior for Windows.

nng - Second beta release of 1.0.0

Published by gdamore over 6 years ago

This is the second beta release of NNG 1.0.0.

NNG is now on a functional code freeze. Furthermore, the ABI is now frozen (library version 1.0.0).

We will very carefully evaluate any new bugs found before this is released for GA; only severe bugs will be considered for integration at this time. If such a bug is found and a fix is required, we will release another beta release.

Permitted changes include test programs, demonstration programs, and documentation fixes and improvements. Also, minor changes to improve the release process, packaging, and non-runtime aspects of the library may be permitted, subject to review.

We expect to release one more change, which will be a release candidate (RC1) before final release.
More details about release plans will be posted to the mailing list.

What's changed since 1.0.0-beta.1?

  • Library ABI is now 1.0.0
  • Websocket transport now honors NNG_OPT_RECVMAXSIZE
  • Legacy mode headers are now more compatible with legacy nanomsg
  • SUB protocol is more aggressive at dropping undeliverable messages
  • Compat mode supports NN_TCP_NODELAY
  • NNG_OPT_TCPNODELAY and NNG_OPT_KEEPALIVE defaults are set at socket creation
  • Bug fix in the websocket URL parsing (if no path is given to websocket URL)
  • SO_REUSEADDR is now set on listening TCP sockets on POSIX systems
  • Various improvements and corrections to documentation

Thanks for your continued testing and support!

nng - First beta release of 1.0.0

Published by gdamore over 6 years ago

Good news! NNG 1.0.0 has reached development complete, and is now entering its first beta period.

During this beta period, no new features will be introduced into the this release. Furthermore, changes to the functional code of the library itself will be restricted to bug fixes. Any bugs requiring non-trivial changes to the library will necessitate another beta cycle before entering the release candidate phase.

Permitted changes include test programs, demonstration programs, and documentation fixes and improvements. Also, some changes to improve the release process, packaging, and non-runtime aspects of the library are permissible.

What's new since 0.9.0?

  • NNG_TCP_OPT_NODELAY option (and legacy compat)
  • Socket, pipe, and similar types are now structural instead of integers
  • Pipe notification callbacks. See nng_pipe_notify(3) for details.
  • Peer identification option for IPC transport (see nng_ipc(7) for details.)
  • Solaris and illumos support, including scalable port event based poller.
  • New options to nngcat(1) to control repeat count and message size.
  • Significant changes that should reduce lock contention and increase performance and scalability.
  • New tcp4://, tcp6://, tls+tcp4://, and tls+tcp6:// scheme support. See nng_tcp(7) and nng_tls(7).

Numerous bugs have been fixed, supported by much more extensive testing and significant improvements to the test suite itself.

Thank you for helping us ensure the highest quality release by testing this out!

nng - Version 0.9.0

Published by gdamore over 6 years ago

The big change for this release is context support used for REQ/REP to SURVEYOR/RESPONDENT. With this change, there is very little reason for raw sockets to be used, except in creation of devices and obscure test and debug scenarios.

A few bugs, some serious, have been fixed -- most notably a serious regression in REQ/REP caused by the original context work -- this turned out to have sweeping ramifications, and small changes were made across the code base to resolve the key issue (which was the need to separate nni_aio_start into two separate functions, which are now nni_aio_begin and nni_aio_schedule. Note that these two functions are for internal use only.)

Additionally, the compatible API is now documented.

At this point we consider nng "feature complete" for a 1.0 release; we will be focusing on performance, bugs, test cases, and demonstration code for the rest of the lead-up to 1.0. (We do have post-1.0 features planned, of course!)

Note that there are still some edge case features missing from nng which are present in nanomsg -- statistics, pipe priorities, certain socket options (TCP_NODELAY for example), and security attributes (named pipes on Windows only). We may still add support for some of these missing things before 1.0 depending on risk assessment. Otherwise we will do them in the following release. (If any of these features are a stopper for you, and you are using them with nanomsg, please let us know!)

nng - Version 0.8.0

Published by gdamore over 6 years ago

This release has what should be the final breaking API changes prior to 1.0. Specifically, the RAW mode sockets are no longer established by NNG_OPT_RAW -- which has become a read-only option, but are instead created by new constructors, such as nng_req0_open_raw().

Additionally, this release introduces a major new capability -- contexts. The details of this are located in the nng_ctx(5) manual page, as well as an example. An example showing the use of contexts with the HTTP server API to create a REST API to REQ/REP gateway exists in the demo/rest directory. At the moment contexts are only available for REQ and REP protocols -- addition of support for contexts with SURVEYOR and RESPONDENT is planned for the next release.

Note that users of the REQ and REP protocols may notice differences in behavior around queueing and flow control -- in particular REQ will probably apply backpressure now, so that attempts to send requests will block if there are no pipes available (and the pollable status will reflect this.)

Significant performance improvements have been made -- users may see up to 20% better performance compared to 0.7.0, depending on numerous factors. More work in this area is still planned.

A number of other issues (bugs) have been fixed as well.

We would be especially grateful for any extra testing, especially of the REQ and REP protocols and the new context facility.

nng - Version 0.7.0 Beta Release

Published by gdamore over 6 years ago

This release has some breaking changes for users of properties such as NNG_OPT_RAW and NNG_OPT_PAIR1_POLY, as well as users of the ZeroTier transport.

Most of the other changes in this release amount to massive documentation improvements.

However, Linux now uses epoll(), thanks to a contribution by Liam Staskawicz, which should lead to greater scalability.

There is a new nng_sleep_aio() API, and a demo/async program that demonstrates using the async AIO features.

Please also note that the documentation on the website and on Leanpub has all been updated to reflect this.

We are getting much closer to a 1.0 release, so I'm really grateful for testing and review feedback!

Thanks!

nng - Version 0.6.0 Beta Release

Published by gdamore over 6 years ago

This release involves primarily bug fixes for the ZeroTier transport, and documentation updates.

Applications using the ZeroTier transport option NNG_ZT_NETWORK_STATUS should be aware that this option has changed; code updates will be required. See the nng_zerotier(7) man page for more details.

nng - Version 0.5.0 Beta Release

Published by gdamore over 6 years ago

This release adds the following:

  • nngcat utility
  • many manual pages
  • kqueue based BSD poller (performance & scalability)
  • public HTTP API
  • Improvements to the TLS API
  • Numerous bug fixes

We believe this release is getting reasonably close to being ready to stabilize for a public API.

Testing and review is requested!

nng - Version 0.2.0 Beta Release

Published by gdamore almost 7 years ago

This version adds quite a lot since 0.1.0, but most notable is the addition of websocket (ws://) and websocket secure (wss://) support.

Please be careful and don't use this in production yet, but it is suitable for development and testing. There might still be API breakage in the future, but things are looking more and more stable now.

nng - First pre-release.

Published by gdamore almost 7 years ago

This is the first "pre-release" of nng. A lot may still change (even the project name!), but most of the core functionality is now working well enough for us to post this for users to test against.

Please note that 0.1 means what it says -- you should not depend on this for anything, and we will probably break things in future releases -- there are no semantic version guarantees here.