-
Notifications
You must be signed in to change notification settings - Fork 592
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a1cb788
commit 4dacc27
Showing
1 changed file
with
112 additions
and
107 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,112 +1,117 @@ | ||
[![Join the chat at https://gitter.im/zeroc-ice/ice](https://badges.gitter.im/zeroc-ice/ice.svg)](https://gitter.im/zeroc-ice/ice?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) | ||
|
||
# Ice - Comprehensive RPC Framework | ||
|
||
Ice helps you network your software with minimal effort. By taking care of all | ||
interactions with low-level network programming interfaces, Ice allows you to focus | ||
your efforts on your application logic. When using Ice, there is no need to worry | ||
about details such as opening network connections, serializing and deserializing | ||
data for network transmission, or retrying failed connection attempts (to name just | ||
a few of dozens of such low-level details). | ||
|
||
You can download Ice releases from [ZeroC's website](https://zeroc.com/downloads/ice). | ||
Use this GitHub repository to build from source; see [branches](#branches) for more | ||
information. | ||
|
||
## Languages | ||
|
||
Ice supports the following programming languages: | ||
|
||
- C# | ||
- C++ | ||
- Java | ||
- JavaScript | ||
- MATLAB | ||
- Objective-C | ||
- PHP | ||
- Python | ||
- Ruby | ||
- Swift | ||
- TypeScript | ||
|
||
## Platforms | ||
|
||
Ice runs on a wide range of platforms: | ||
|
||
- Android | ||
- iOS | ||
- Linux | ||
- Linux on embedded devices | ||
- macOS | ||
- Node.js | ||
- Unix systems such as AIX | ||
- Web Browser | ||
- Windows | ||
|
||
## Features | ||
|
||
- Efficient, high-performance binary protocol | ||
- Supports a wide range of programming languages and platforms | ||
- Easy to use and type-safe API, with your own interfaces and types defined in | ||
a programming language neutral IDL, Slice | ||
- Supports secure, encrypted communications by taking advantage of your | ||
platform's native SSL/TLS stack | ||
- Familiar object-oriented programming model, with the ability to transmit | ||
proxies (references to remote objects) to remote applications | ||
- Supports synchronous and asynchronous calls, for both client-side invocations | ||
and server-side dispatches | ||
- Automatic discovery of remote objects through UDP multicast | ||
- Comes with a number of optional services: | ||
- [IceGrid](https://zeroc.com/products/ice/services/icegrid) - a DNS-like | ||
service for Ice objects, with support for server deployment, replication, | ||
monitoring, load-balancing and more | ||
- [IceStorm](https://zeroc.com/products/ice/services/icestorm) - a | ||
lightweight topic-based pub-sub service | ||
- [Glacier2](https://zeroc.com/products/ice/services/glacier2) - a | ||
sysadmin-friendly solution for routing Ice communications through firewalls | ||
|
||
## Branches | ||
|
||
- `master` | ||
Primary development branch (unstable, frequently updated) | ||
|
||
- `3.7` | ||
Ice 3.7.x plus various patches (stable, frequently updated) | ||
|
||
- `3.6` | ||
Ice 3.6.x plus various patches (stable) | ||
|
||
- `3.5` | ||
Ice 3.5.1 plus various patches (stable) | ||
|
||
- `3.4` | ||
Ice 3.4.2 plus various patches (stable) | ||
|
||
## Copyright and License | ||
|
||
Ice is a single-copyright project: all the source code in this [ice | ||
repository](https://github.com/zeroc-ice/ice) is Copyright © ZeroC, Inc., | ||
with very few exceptions. | ||
|
||
As copyright owner, ZeroC can license Ice under different license terms, and | ||
offers the following licenses for Ice: | ||
- GPL v2, a popular open-source license with strong | ||
[copyleft](https://en.wikipedia.org/wiki/Copyleft) conditions (the default | ||
license) | ||
- Commercial or closed-source licenses | ||
[![Join the chat at https://gitter.im/zeroc-ice/ice](https://badges.gitter.im/zeroc-ice/ice.svg)][gitter] | ||
|
||
# The Ice framework | ||
|
||
Ice helps you build networked applications with minimal effort. By taking care of all interactions with low-level | ||
network programming interfaces, Ice allows you to focus your efforts on your application logic. You don't need to | ||
worry about details such as opening network connections, encoding and decoding data for network transmission, | ||
or retrying failed connection attempts (to name just a few of dozens of such low-level details). | ||
|
||
[Downloads][downloads] | [Examples][examples] | [Documentation][docs] | ||
|
||
## RPCs with Ice | ||
|
||
Remote procedure calls ([RPCs][rpcs]) are at the heart of the Ice framework. | ||
|
||
You create RPCs with an easy 2-step process: | ||
1. Define the contract between your client and your server with the [Slice][slice] language—Ice's [IDL][idl]. | ||
2. Run the Slice compiler on these Slice definitions to generate stubs in the programming language(s) of your choice. | ||
|
||
For example: | ||
|
||
```slice | ||
// The contract specified using Slice. | ||
interface Hello | ||
{ | ||
// The caller says "hello". | ||
void sayHello(); | ||
} | ||
``` | ||
|
||
```shell | ||
# Compile the Slice contract with the Slice compiler for C++ (slice2cpp) | ||
slice2cpp Hello.ice | ||
``` | ||
|
||
```c++ | ||
// C++ client | ||
|
||
If you license Ice under GPL v2, there is no license fee or signed license | ||
agreement: you just need to comply with the GPL v2 terms and conditions. See | ||
[ICE_LICENSE](./ICE_LICENSE) and [LICENSE](./LICENSE) for further information. | ||
// Call operation sayHello on a remote object that implements | ||
// interface Hello using the generated proxy class (HelloPrx). | ||
helloPrx->sayHello(); | ||
``` | ||
|
||
If you purchase a commercial or closed-source license for Ice, you must comply | ||
with the terms and conditions listed in the associated license agreement; the | ||
GPL v2 terms and conditions do not apply. | ||
```c++ | ||
// C++ server | ||
|
||
The Ice software itself remains the same: the only difference between an open-source | ||
Ice and a commercial Ice are the license terms. | ||
// Implement the Hello interface by deriving from the generated | ||
// Hello abstract base class. | ||
class HelloImpl : public Hello | ||
{ | ||
public: | ||
|
||
## Documentation | ||
virtual string sayHello(const Ice::Current&) override | ||
{ | ||
cout << "Hello World!" << endl; | ||
} | ||
}; | ||
``` | ||
|
||
You can use any supported programming language for your client and server. For example, a Python client could call a C++ | ||
server; neither side knows the programming language used by the other side. | ||
|
||
## Complete solution with a uniform API | ||
|
||
The Ice framework provides everything you need to build networked applications: | ||
- RPCs with a compact binary [protocol][protocol] over a variety of network transports (TCP, UDP, WebSocket, | ||
Bluetooth...) | ||
- Secure communications ([IceSSL][icessl]) | ||
- Configuration ([Ice Properties][properties]) | ||
- Logging ([Ice Logger][logger]) | ||
- Instrumentation and metrics ([IceMX][icemx]) | ||
- Pub-sub ([IceStorm][icestorm]) | ||
- Server deployment, replication and monitoring ([IceGrid][icegrid]) | ||
- Session management and firewall traversal ([Glacier2][glacier2]) | ||
|
||
The Ice API is defined almost entirely using Slice; as a result, it is essentially the same in all programming | ||
languages. | ||
|
||
## Building Ice from source | ||
|
||
[C++](cpp) | [C#](csharp) | [Java](java) | [JavaScript/TypeScript](js) | [MATLAB](matlab) | [Objective-C](objective-c) | [PHP](php) | [Python](python) | [Ruby](ruby) | [Swift](swift) | ||
|
||
## Copyright and license | ||
|
||
Ice is a single-copyright project: all the source code in this [ice repository][ice-repo] is | ||
Copyright © ZeroC, Inc., with very few exceptions. | ||
|
||
As copyright owner, ZeroC can license Ice under different license terms, and offers the following licenses for Ice: | ||
- GPL v2, a popular open-source license with strong [copyleft][copyleft] conditions (the default license) | ||
- Commercial or closed-source licenses | ||
|
||
- [Ice Release Notes](https://doc.zeroc.com/rel/ice-releases/ice-3-7/ice-3-7-9-release-notes) | ||
- [Ice Manual](https://doc.zeroc.com/ice/3.7/) | ||
If you license Ice under GPL v2, there is no license fee or signed license agreement: you just need to comply with the | ||
GPL v2 terms and conditions. See [ICE_LICENSE](ICE_LICENSE) and [LICENSE](LICENSE) for further information. | ||
|
||
If you purchase a commercial or closed-source license for Ice, you must comply with the terms and conditions listed in | ||
the associated license agreement; the GPL v2 terms and conditions do not apply. | ||
|
||
The Ice software itself remains the same: the only difference between an open-source Ice and a commercial Ice are the | ||
license terms. | ||
|
||
[copyleft]: https://en.wikipedia.org/wiki/Copyleft | ||
[docs]: https://doc.zeroc.com/ice/3.7 | ||
[downloads]: https://zeroc.com/downloads/ice | ||
[examples]: https://github.com/zeroc-ice/ice-demos | ||
[gitter]: https://gitter.im/zeroc-ice/ice?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge | ||
[glacier2]: https://doc.zeroc.com/ice/3.7/ice-services/glacier2 | ||
[ice-repo]: https://github.com/zeroc-ice/ice | ||
[icegrid]: https://doc.zeroc.com/ice/3.7/ice-services/icegrid | ||
[icemx]: https://doc.zeroc.com/ice/3.7/administration-and-diagnostics/administrative-facility/the-metrics-facet | ||
[icessl]: https://doc.zeroc.com/ice/3.7/ice-plugins/icessl | ||
[icestorm]: https://doc.zeroc.com/ice/3.7/ice-services/icestorm | ||
[idl]: https://en.wikipedia.org/wiki/Interface_description_language | ||
[logger]: https://doc.zeroc.com/ice/3.7/administration-and-diagnostics/logger-facility | ||
[properties]: https://doc.zeroc.com/ice/3.7/properties-and-configuration | ||
[protocol]: https://doc.zeroc.com/ice/3.7/ice-protocol-and-encoding | ||
[rpcs]: https://en.wikipedia.org/wiki/Remote_procedure_call | ||
[slice]: https://doc.zeroc.com/ice/3.7/the-slice-language |