use goroutine to write messages to avoid stream corruption. add test that kills backends to test message loss.
added ack support + more tests