Giter Site home page Giter Site logo

ywscr / spear Goto Github PK

View Code? Open in Web Editor NEW

This project forked from shoy160/spear

0.0 0.0 0.0 17.45 MB

Spear轻量级微服务框架,高扩展性,目前已支持TCP、HTTP、WebSocket以及GRPC协议,采用Consul/Nacos作为服务注册与发现组件,TCP协议采用DotNetty底层实现,HTTP协议采用ASP.NET CORE MVC实现。

License: Apache License 2.0

C# 99.67% CSS 0.20% JavaScript 0.14%

spear's Introduction

spear

Spear轻量级微服务框架,高扩展性,目前已支持TCP、HTTP协议,采用Consul作为服务注册与发现组件,TCP协议采用DotNetty底层实现,HTTP协议采用ASP.NET CORE MVC实现。

Package Name NuGet Downloads
Spear.ProxyGenerator nuget stats
Spear.Core nuget stats Wiki
Spear.Codec.MessagePack nuget stats
Spear.Codec.ProtoBuffer nuget stats
Spear.Consul nuget stats
Spear.Nacos nuget stats
Spear.Protocol.Http nuget stats
Spear.Protocol.Tcp nuget stats
Spear.Protocol.WebSocket nuget stats
Spear.Protocol.Grpc nuget stats

Contracts

[ServiceRoute("test")] //自定义路由键
public interface ITestContract : ISpearService
{
    Task Notice(string name);
    Task<string> Get(string name);
}

Server

var services = new MicroBuilder();
//服务协议
var protocol = ServiceProtocol.Tcp;
services.AddMicroService(builder =>
{
    //服务端需指定编解码器和使用协议
    builder
        .AddJsonCoder()             //Json编解码
        //.AddMessagePackCodec()    //MessagePack
        //.AddProtoBufCodec()       //ProtoBuf
        .AddSession()
        //.AddNacos()
        .AddConsul("http://127.0.0.1:8500"); //Consul服务注册与发现
    switch (protocol)
    {
        case ServiceProtocol.Tcp:
            builder.AddTcpProtocol();       //TCP
            break;
        case ServiceProtocol.Http:
            builder.AddHttpProtocol();      //Http
            break;
        case ServiceProtocol.Ws:
            builder.AddWebSocketProtocol(); //WebSocket
            break;
        case ServiceProtocol.Grpc:
            builder.AddGrpcProtocol();      //GRpc
            break;
    }
});

services.AddTransient<ITestContract, TestService>();

var provider = services.BuildServiceProvider();

provider.UseMicroService(address =>
{
    address.Service = "192.168.1.xx";   //服务注册地址,需要保持与客户端的网络访问
    address.Host = "localhost";         //主机地址
    address.Port = 5001;                //端口地址
    address.Weight = 1.5;               //服务权重
    address.Gzip = true;                //是否启用GZip压缩
});

Client

var services = new MicroBuilder()
    .AddMicroClient(builder =>
    {
        //支持多编解码&多协议
        builder
            .AddJsonCodec()
            .AddMessagePackCodec()
            .AddProtoBufCodec()
            .AddHttpProtocol()          //Http
            .AddTcpProtocol()           //TCP
            .AddWebSocketProtocol()     //WebSocket
            .AddGrpcProtocol()          //GRpc
            .AddSession()
            //.AddNacos()
            .AddConsul("http://127.0.0.1:8500");
    });
var provider = services.BuildServiceProvider();
var proxy = provider.GetService<IProxyFactory>();
var service = proxy.Create<ITestContract>();

BenchMark

Protocol:Tcp,Codec:Json,Gzip:False

image

Protocol:Tcp,Codec:Json,Gzip:True

image

Protocol:Tcp,Codec:MessagePack,Gzip:True

image

Protocol:Tcp,Codec:ProtoBuf,Gzip:True

image

Protocol:Http,Codec:Json,Gzip:False

image

Protocol:Http,Codec:Json,Gzip:True

image

Protocol:Http,Codec:MessagePack,Gzip:True

image

Protocol:Http,Codec:ProtoBuf,Gzip:True

image

Protocol:WebSocket,Codec:Json,Gzip:False

image

Protocol:WebSocket,Codec:Json,Gzip:True

image

Protocol:WebSocket,Codec:MessagePack,Gzip:True

image

Protocol:WebSocket,Codec:ProtoBuf,Gzip:True

image

Protocol:GRpc

image

spear's People

Contributors

shoy160 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.