Skip to content

Commit

Permalink
update web documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolasgere committed Jun 6, 2020
2 parents 7fcb69e + a40182e commit e3dd14c
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 24 deletions.
37 changes: 19 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@

# 🦉 Tawny 🦉

🚀 Tawny is an extremly low latency, public facing pubsub. It use protobuf for end to end communication (from browser to server and server to browser) using [grpc-web](https://github.com/grpc/grpc-web) protocol.
🚀 Tawny is an extremely low latency, public facing pubsub. It uses protobuf for end-to-end communication (from browser to server and server to browser) using [grpc-web](https://github.com/grpc/grpc-web) protocol.
It allows you to build an awesome user experience with realtime features.

## Core features
Tawny was designed with performance/scalling/reliability in mind. It provide multiple keys feature:
- **Publish/Subscribe**, publish a message from anywhere and get your users notified instantly
- **Presence**, know who is connected or not in a channel, perfect for building presense feature like google docs
- **State**, you can share a state with your presence, awesome for "is writing" feature.
- **Binary data**, thanks to profobuf/grpc, your payload don't need to be json. It can be every binary fuke
- **Private channel**, you can control who have access to a channel.
- **Complete admin library/cli**, manage your Tawny server using a powerfull admin api.
- **Monitoring**, monitor your server easily with our promotheus(and more to come) metrics exporter.
Tawny was designed with performance/scaling/reliability in mind. It provides multiple keys feature:
- **Publish/Subscribe**, publish a message from anywhere and get your users notified instantly.
- **Presence**, know who is connected or not in a channel, perfect for building presense feature like google docs.
- **State**, you can share a state with your presence, awesome for "is typing" feature.
- **Binary data**, thanks to profobuf/grpc, your payload doesn't need to be json. It can be every binary fuke
- **Private channel**, you can control who has access to a channel.
- **Complete admin library/cli**, manage your Tawny server using a powerful admin api.
- **Monitoring**, monitor your server easily with our promotheus (and more to come) metrics exporter.

## HTTP2/Protobuff advantage over HTTP1/json
- **Network bandwidth** Profobuf allow the app to use less bandwidth as demonstrated here.[auth0 blog](https://auth0.com/blog/beating-json-performance-with-protobuf/)
- **Usage of http2** Http2 is the new version of the famous http protocal, faster, more reliable, allow server push and many more. [cloudfare blog](https://www.cloudflare.com/learning/performance/http2-vs-http1.1/)
- **Binary data** You can send raw binary data using tawny using protobuff.
- **Network bandwidth** Profobuf allows the app to use less bandwidth as demonstrated there.[auth0 blog](https://auth0.com/blog/beating-json-performance-with-protobuf/)
- **Usage of http2** Http2 is the new version of the famous http protocol, faster, more reliable, allows server push and much more. [cloudfare blog](https://www.cloudflare.com/learning/performance/http2-vs-http1.1/)
- **Binary data** You can send raw binary data with tawny using protobuff.

## Getting started
Visit the [documentation](docs)
## Feature roadmap

This is our feature roadmap. If you want to ask a new feature. Please open an issue
This is our feature roadmap. If you want to ask for a new feature, please open an issue

##### v0.1 Alpha => On going
- [x] Push service (Public facing publish/subscrib)
Expand All @@ -32,20 +32,21 @@ This is our feature roadmap. If you want to ask a new feature. Please open an is
- [x] Typescript web npm package
- [ ] Typescript server npm package
- [x] Golang module
- [x] Automatique TLS terminaison
- [x] Automatic TLS termination for https
- [ ] GRPC secure mode
- [x] Docker image
- [x] Protected topic (message can only be push from authenticate admin request)
- [x] Protected topic (message can only be pushed from authenticated admin request)


##### Backlog

- [ ] Secure channel
- [ ] Cluster mode
- [ ] Android/IOS/Java/C#/Python etc client
- [ ] Admin ui
- [ ] Admin ui
- [ ] Clients (java/swift/php/c#/python)

## Performance
With 1 core / 1gb of ram on Digital ocean, Tawny is able to process up to 50k message seconds within < 5 ms latency.
With 1 core / 1gb of ram on Digital ocean, Tawny is able to process up to 50k messages seconds within < 5 ms latency.

## Author

Expand Down
8 changes: 4 additions & 4 deletions docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ docker run -e TAWNY_ADMIN_KEY="A_SECRET_KEY" -p 8080:80 -p 4000:4000 elmazout/ta
This will start a tawny server listening on port 8080 for http and 4000 for grpc.

#### Connect with grpcurl
[grpcurl](https://github.com/fullstorydev/grpcurl) is a tool to communicate with a grpc server using command line. We will use that as an admin interface with the tawny server.
[grpcurl](https://github.com/fullstorydev/grpcurl) is a tool to communicate with a grpc server using the command line. We will use that as an admin interface with the tawny server.

Listing services:
```bash
Expand All @@ -33,8 +33,8 @@ service AdminService {
rpc ListChannel ( .google.protobuf.Empty ) returns ( .tawny.ListChannelOutput );
}
```
``CreateChannelOrUpdate`` is the grpc method we want to use. All this service are defined in the [protofile](https://github.com/nicolasgere/Tawny/tree/master/protos).
Lets create the channel now based on the proto definition.
``CreateChannelOrUpdate`` is the grpc method we want to use. All these services are defined in the [protofile](https://github.com/nicolasgere/Tawny/tree/master/protos).
Let's create the channel now based on the proto definition.

```bash
~/ grpcurl -plaintext -d '{"name":"test-channel", "configuration":{"admin_required_to_push":false}}' localhost:4000 tawny.AdminService/CreateChannelOrUpdate
Expand All @@ -56,5 +56,5 @@ Lets create the channel now based on the proto definition.
```
Voila !

As tawny do not provide any admin UI for now I recommand to use [bloomrpc](https://github.com/uw-labs/bloomrpc). It's a postman like for grpc. Using proto definition it give you an easy way to test tawny.
As tawny does not provide any admin UI for now I recommand to use [bloomrpc](https://github.com/uw-labs/bloomrpc). It's a postman like UI for grpc. Using proto definition it gives you an easy way to test tawny.

2 changes: 1 addition & 1 deletion docs/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ docker pull elmazout/tawny:latest

## Configuration

Tawny can be configured using environment variable
Tawny can be configured using environment variables

| Variable | Description | Default
| --- | --- | --- |
Expand Down
2 changes: 1 addition & 1 deletion docs/proto.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@

| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| admin_required_to_push | [bool](#bool) | | Define if a message can be push without admin api key. Common use case: Only allow server to push message |
| admin_required_to_push | [bool](#bool) | | Define if a message can be pushed without admin api key. Common use case: Only allow server to push message |



Expand Down

0 comments on commit e3dd14c

Please sign in to comment.