go tcp server

weiwenwang · · 1648 次点击
我在写c/swoole的时候,每个连接都是一个fd,我可以把这个fd存在外部,当某台机器要发消息给uid1这个用户,就可以到redis里面找这个人在哪台机器,fd是多少,就可以通知这台机器发消息了,我看conn是内存地址,这个肯定是存不了 我可以把uid作为key, conn作为value存map里面,然后在redis里面存uid在哪套机器上,找到机器后,在通过uid找conn
#5
更多评论
问题还是有点意思的,可以考虑用 chan 来实现这个,下面是我写的代码,可以参考着写个更完善的。 ``` go package main import ( "bufio" "fmt" "io" "net" "os" ) func main() { l, _ := net.Listen("tcp", ":8000") for { conn, _ := l.Accept() ch := make(chan string) go talk(conn, ch) go input(ch) } } func talk(conn io.ReadWriteCloser, ch chan string) { for c := range ch { fmt.Fprintf(conn, c) } fmt.Fprintf(conn, "closed, byebye.") conn.Close() } func input(ch chan string) { reader := bufio.NewReader(os.Stdin) text, _ := reader.ReadString('\n') for text != "#\n" { ch <- text text, _ = reader.ReadString('\n') } close(ch) } ```
#2