Skip to content

Releases: nanomsg/nng

Version 1.1.1

22 Nov 03:28
Compare
Choose a tag to compare

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

Version 1.1.0

10 Nov 03:56
Compare
Choose a tag to compare

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.

1.1.0 Release Candidate

06 Nov 02:33
Compare
Choose a tag to compare
Pre-release

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.

Version 1.0.1

05 Jul 20:01
Compare
Choose a tag to compare

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.

Version 1.0.0

08 Jun 21:59
Compare
Choose a tag to compare

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.

1.0.0 Release Candidate 1

02 Jun 01:21
Compare
Choose a tag to compare
Pre-release

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.

Second beta release of 1.0.0

22 May 18:35
Compare
Choose a tag to compare
Pre-release

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!

First beta release of 1.0.0

18 May 15:32
Compare
Choose a tag to compare
Pre-release

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!

Version 0.9.0

25 Apr 03:19
Compare
Choose a tag to compare
Version 0.9.0 Pre-release
Pre-release

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!)

Version 0.8.0

12 Apr 16:02
Compare
Choose a tag to compare
Version 0.8.0 Pre-release
Pre-release

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.