Go Python Makefile Other
Clone or download
szkl Merge pull request #214 from koding/webrtc
protocol: webrtc support
Latest commit baa1a54 Jul 10, 2018
Permalink
Failed to load latest commit information.
config protocol: add webrtc support Jan 8, 2018
dnode Small fixes in code suggested by go vet tool Jan 30, 2017
examples example: fix math kite Nov 29, 2017
kitectl Correcting misspelled words in string and comments Jan 30, 2017
kitekey Correcting misspelled words in string and comments Jan 30, 2017
kitetest Merge pull request #214 from koding/webrtc Jul 10, 2018
kontrol Merge pull request #214 from koding/webrtc Jul 10, 2018
postgres.d make: add postgres target May 12, 2016
protocol protocol: add webrtc support Jan 8, 2018
reverseproxy Correcting misspelled words in string and comments Jan 30, 2017
sockjsclient kite: make done channels bufferred to avoid potential leaks Mar 24, 2017
systeminfo Gofmted all files Jan 30, 2017
test appveyor: add initial configuration file Jun 16, 2016
testkeys kontrol: deny self-signed kite keys Jun 5, 2016
testutil kite: adapt code to latest go.uuid version Jun 17, 2018
tunnelproxy sockjs: rewrite import paths Mar 20, 2017
utils Correcting misspelled words in string and comments Jan 30, 2017
.gitignore make: add .env file May 18, 2016
.travis.yml dep: init deps with dep tool Jan 8, 2018
Gopkg.lock kite: update dep files Jun 17, 2018
Gopkg.toml kite: update dep files Jun 17, 2018
LICENSE Update LICENSE Jan 7, 2016
Makefile dep: init deps with dep tool Jan 8, 2018
README.md Merge pull request #94 from techjanitor/master Apr 29, 2015
appveyor.yml dep: init deps with dep tool Jan 8, 2018
bug_test.go kite: don't explicitely close sessions Jun 21, 2016
client.go protocol: add webrtc support Jan 8, 2018
errors.go kite: add request ID to server-side kite handlers Aug 15, 2016
handlers.go protocol: add webrtc support Jan 8, 2018
heartbeat.go client: set timeout for heartbeats / register over HTTP Mar 20, 2017
kite.go Merge pull request #214 from koding/webrtc Jul 10, 2018
kite_test.go kite: adapt code to latest go.uuid version Jun 17, 2018
kontrolclient.go protocol: add webrtc support Jan 8, 2018
logger.go Correcting misspelled words in string and comments Jan 30, 2017
logger_unix.go appveyor: add initial configuration file Jun 16, 2016
method.go Correcting misspelled words in string and comments Jan 30, 2017
method_test.go request: refactor Context Nov 28, 2017
registerurl.go kite: limit reading HTTP response payloads Jul 27, 2016
request.go kite: cancel Context when client disconnects Nov 29, 2017
server.go config: add Serve field Jun 1, 2017
tokenrenewer.go tokenrenewer: do not buffer signals Jan 4, 2017

README.md

Kite Micro-Service Framework

Kite is a framework for developing micro-services in Go.

GoDoc Build Status

Kite

Kite is both the name of the framework and the micro-service that is written by using this framework. Basically, Kite is a RPC server as well as a client. It connects to other kites and peers to communicate with each other. They can discover other kites using a service called Kontrol, and communicate with them bidirectionaly. The communication protocol uses a WebSocket (or XHR) as transport in order to allow web applications to connect directly to kites.

Kites can talk with each other by sending dnode messages over a socket session. If the client knows the URL of the server kite it can connect to it directly. If the URL is not known, client can ask for it from Kontrol (Service Discovery).

For more info checkout the blog post at GopherAcademy which explains Kite in more detail: http://blog.gopheracademy.com/birthday-bash-2014/kite-microservice-library/

Install and Usage

Install the package with:

go get github.com/koding/kite

Import it with:

import "github.com/koding/kite"

and use kite as the package name inside the code.

What is Kontrol?

Kontrol is the service registry and authentication service used by Kites. It is itself a kite too.

When a kite starts to run, it can registers itself to Kontrol with the Register() method if wished. That enables others to find it by querying Kontrol. There is also a Proxy Kite for giving public URLs to registered kites.

Query has 7 fields:

/<username>/<environment>/<name>/<version>/<region>/<hostname>/<id>
  • You must at least give the username.
  • The order of the fields is from general to specific.
  • Query cannot contains empty parts between fields.

Installing Kontrol

Install Kontrol:

go get github.com/koding/kite/kontrol/kontrol

Generate keys for the Kite key:

openssl genrsa -out key.pem 2048
openssl rsa -in key.pem -pubout > key_pub.pem

Set environment variables:

KONTROL_PORT=6000
KONTROL_USERNAME="kontrol"
KONTROL_STORAGE="etcd"
KONTROL_KONTROLURL="http://127.0.0.1:6000/kite"
KONTROL_PUBLICKEYFILE="certs/key_pub.pem"
KONTROL_PRIVATEKEYFILE="certs/key.pem"

Generate initial Kite key:

./bin/kontrol -initial

How can I use kites from a browser?

A browser can also be a Kite. It has it's own methods ("log" for logging a message to the console, "alert" for displaying alert to the user, etc.). A connected kite can call methods defined on the webpage.

See kite.js library for more information.

How can I write a new kite?

  • Import kite package.
  • Create a new instance with kite.New().
  • Add your method handlers with k.HandleFunc() or k.Handle().
  • Call k.Run()

Below you can find an example, a math kite which calculates the square of a received number:

package main

import "github.com/koding/kite"

func main() {
	// Create a kite
	k := kite.New("math", "1.0.0")

	// Add our handler method with the name "square"
	k.HandleFunc("square", func(r *kite.Request) (interface{}, error) {
		a := r.Args.One().MustFloat64()
		result := a * a    // calculate the square
		return result, nil // send back the result
	}).DisableAuthentication()

	// Attach to a server with port 3636 and run it
	k.Config.Port = 3636
	k.Run()
}

Now let's connect to it and send a 4 as an argument.

package main

import (
	"fmt"

	"github.com/koding/kite"
)

func main() {
	k := kite.New("exp2", "1.0.0")

	// Connect to our math kite
	mathWorker := k.NewClient("http://localhost:3636/kite")
	mathWorker.Dial()

	response, _ := mathWorker.Tell("square", 4) // call "square" method with argument 4
	fmt.Println("result:", response.MustFloat64())
}

Check out the examples folder for more examples.