Back to rankings

zeroc-ice/ice

C++zeroc.com

All-in-one solution for creating networked applications with RPC, pub/sub, server deployment, and more.

rpcicezerocrpc-frameworkhacktoberfest
Star Growth
Stars
2.2k
Forks
600
Weekly Growth
Issues
111
1k2k
Mar 2015Dec 2018Oct 2022Jul 2026
README

CI GPLv2 Static Badge

The Ice framework

The Internet Communications Engine (Ice) is a complete RPC framework that helps you build networked applications with minimal effort. Ice allows you to focus your efforts on your application logic, and it takes care of all interactions with low-level network programming interfaces. With 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.

Downloads | Examples | Documentation

RPCs with Ice

Remote procedure calls (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 language—Ice's IDL.
  2. Run the Slice compiler on these Slice definitions to generate stubs in the programming language(s) of your choice.

For example:

// The contract specified using Slice.

/// Represents a simple greeter.
interface Greeter
{
    /// Creates a personalized greeting.
    /// @param name The name of the person to greet.
    /// @return The greeting.
    string greet(string name);
}
# Compile the Slice contract with the Slice compiler for C++ (slice2cpp)
slice2cpp Greeter.ice
// C++ client

// Call operation greet on a remote object that implements
// interface Greeter using the generated proxy class (GreeterPrx).
GreeterPrx greeter{communicator, "greeter:tcp -h localhost -p 4061"};
string greeting = greeter.greet("alice");
// C++ server

// Implements the Greeter interface by deriving from the generated
// Greeter abstract base class.
class Chatbot : public Greeter
{
public:
    std::string greet(std::string name, const Ice::Current&) override
    {
        std::ostringstream os;
        os << "Hello, " << name << "!";
        return os.str();
    }
};

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:

Language Support

C++ | C# | Java | JavaScript/TypeScript | MATLAB | PHP | Python | Ruby | Swift

Ice is a single-copyright project: all the source code in this ice repository 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:

  • GPLv2, a popular open-source license with strong copyleft conditions (the default license)
  • Commercial or closed-source licenses

If you license Ice under GPLv2, there is no license fee or signed license agreement: you just need to comply with the GPLv2 terms and conditions. ZeroC also grants a few exceptions to the GPLv2 terms and conditions.

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 GPLv2 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.

Related repositories
doocs/advanced-java

😮 Core Interview Questions & Answers For Experienced Java(Backend) Developers | 互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识

JavaMavenCreative Commons Attribution Share Alike 4.0 Internationaljavadistributed-systems
java.doocs.org
79k19.2k
protocolbuffers/protobuf

Protocol Buffers - Google's data interchange format

C++Otherprotobufprotocol-buffers
protobuf.dev
71.6k16.2k
meteor/meteor

Meteor, the JavaScript App Platform

JavaScriptnpmOtherjavascriptmeteor
meteor.com
44.8k5.2k
apache/dubbo

The java implementation of Apache Dubbo. An RPC and microservice framework.

JavaMavenApache License 2.0dubbodistributed-systems
dubbo.apache.org
41.5k26.4k
aria2/aria2

aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.

C++GNU General Public License v2.0cpp11http
aria2.github.io
41.5k3.9k
zeromicro/go-zero

A cloud-native Go microservices framework with cli tool for productivity.

GoGo ModulesMIT Licensegolangmicroservice
go-zero.dev
33.2k4.3k
google/flatbuffers

FlatBuffers: Memory Efficient Serialization Library

C++Apache License 2.0flatbuffersserialization
flatbuffers.dev
26.2k3.6k
grpc/grpc-go

The Go language implementation of gRPC. HTTP/2 based RPC

GoGo ModulesApache License 2.0gogrpc
grpc.io
23k4.7k
chai2010/advanced-go-programming-book

:books: 《Go语言高级编程》开源图书,涵盖CGO、Go汇编语言、RPC实现、Protobuf插件实现、Web框架实现、分布式系统等高阶主题(完稿)

GoGo ModulesBSD 2-Clause "Simplified" Licensegogolang
chai2010.cn/advanced-go-programming-book/
20.1k3.2k
apache/brpc

brpc is an Industrial-grade RPC framework using C++ Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. "brpc" means "better RPC".

C++Apache License 2.0rpc
brpc.apache.org
17.6k4.1k
TanStack/router

🤖 A client-first, server-capable, fully type-safe router and full-stack framework for the web (React and more).

TypeScriptnpmMIT Licensereactrouter
tanstack.com/router
14.8k1.8k
grpc/grpc-rust

A native gRPC client & server implementation with async/await support.

Rustcrates.ioMIT Licenserustgrpc
docs.rs/tonic
12.4k1.2k