# Protocol Servers

## Introduction you can extend your own protocol in go chassis, currently support rest(http) and gRPC

## Configurations

protocols.{protocol_server_name} > (required, string) the name of the protocol server, it must be protocol name or consist of protocol name and a suffix.

the suffix and protocol is connect with hyphen “-” like <protocol>-{suffix}

protocols.{protocol_server_name}.advertiseAddress > (optional, string) server advertise address, if you use registry like service center, this address will be registered in registry, so that other service can discover your address

protocols.{protocol_server_name}.listenAddress > (required, string) server listen address, recommend to use 0.0.0.0:{port}, then go chassis will automatically generate advertise address, it is convenience to run in container

because the internal IP is not sure until container runs

## Example this config will launch 2 http server and 1 grpc server ``` servicecomb:

protocols:
rest:

listenAddress: 0.0.0.0:5000

rest-admin:

listenAddress: 0.0.0.0:5001

grpc:

listenAddress: 0.0.0.0:6000

```

for ipv6, need quotation marks. because [] is object list in yaml format ``` servicecomb:

protocols:
rest:

listenAddress: “[2407:c080:17ff:ffff::7274:83a]:5000”

```

if you do not want to specify a port, you can leave the port empty (use quotes) or use 0, the system will give a random port for you ``` servicecomb:

protocols:
rest:

listenAddress: 0.0.0.0:0

grpc:

listenAddress: “127.0.0.1:”

```