赞
踩
Apache是同步模型,Nginx是异步模型
一个服务端连接多个客户端,例如:世界各地的用户使用自己电脑的浏览器访问淘宝网。
示例:
package main import ( "fmt" "net" ) //处理客户端连接请求 func process(coon net.Conn) { defer coon.Close() //定义接收信息的字节数组 var buf [1024]byte //读取数据 n, err := coon.Read(buf[:]) if err != nil { fmt.Println("获取信息失败,err:", err) return } fmt.Printf("对方回复信息是:%s", string(buf[:n])) } //TCP服务端配置 func main() { //1:启用监听 listener, err := net.Listen("tcp", "127.0.0.1:20000") //连接失败处理 if err != nil { fmt.Println("启动服务失败,err:", err) return } //程序退出时释放端口 defer listener.Close() for { conn, err := listener.Accept() //2.建立连接 if err != nil { fmt.Println("接收客户连接失败,err:", err) continue } //3.启动一个人goroutine处理客户端连接 go process(conn) } }
package main import ( "fmt" "net" ) //TCP客户端 func main() { //1:拨号方式建立与服务端连接 conn, err := net.Dial("tcp", "127.0.0.1:20000") if err != nil { fmt.Println("连接服务端失败,err:", err) return } //注意:关闭连接位置,不能写在连接失败判断上面 defer conn.Close() //2:向server发送信息 //fmt.Fprintln(conn,("hello,tom")) _, err = conn.Write([]byte("hello,tom")) if err != nil { fmt.Println("发送信息失败,err:", err) return } }
测试结果如下:
连接成功:
连接失败:
客户端
package main import ( "bufio" "fmt" "net" "os" ) //TCP客户端 func main() { //1:拨号方式建立与服务端连接 conn, err := net.Dial("tcp", "127.0.0.1:20000") if err != nil { fmt.Println("连接服务端失败,err:", err) return } //注意:关闭连接位置,不能写在连接失败判断上面 defer conn.Close() //控制台输入 reader := bufio.NewReader(os.Stdin) input, err := reader.ReadString('\n') if err != nil { fmt.Println("控制台输入失败,err:", err) return } //2:向server发送信息 //fmt.Fprintln(conn,("hello,tom")) _, err = conn.Write([]byte(input)) if err != nil { fmt.Println("发送信息失败,err:", err) return } }
服务端
package main import ( "fmt" "net" ) //处理客户端连接请求 func process(coon net.Conn) { defer coon.Close() //定义接收信息的字节数组 var buf [1024]byte //读取数据 n, err := coon.Read(buf[:]) if err != nil { fmt.Println("获取信息失败,err:", err) return } fmt.Printf("对方回复信息是:%s", string(buf[:n])) } //TCP服务端配置 func main() { //1:启用监听 listener, err := net.Listen("tcp", "127.0.0.1:20000") //连接失败处理 if err != nil { fmt.Println("启动服务失败,err:", err) return } //程序退出时释放端口 defer listener.Close() for { conn, err := listener.Accept() //2.建立连接 if err != nil { fmt.Println("接收客户连接失败,err:", err) continue } //3.启动一个人goroutine处理客户端连接 go process(conn) } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。