1.TCP并发C/S模型通信
1.1并发Server
现在已经完成了客户端与服务端的通信,但是服务端只能接收一个用户发送过来的数据,怎样接收多个客户端发送过来的数据,实现一个高效的并发服务器呢?
Accept()函数的作用是等待客户端的链接,如果客户端没有链接,该方法会阻塞。如果有客户端链接,那么该方法返回一个Socket负责与客户端进行通信。所以,每来一个客户端,该方法就应该返回一个Socket与其通信,因此,可以使用一个死循环,将Accept()调用过程包裹起来。
需要注意的是,实现并发处理多个客户端数据的服务器,就需要针对每一个客户端连接,单独产生一个Socket,并创建一个单独的goroutine与之完成通信。
package main
import (
"net"
"fmt"
)
func Handle(conn net.Conn) {
buf:=make([]byte,4096)
n,err:=conn.Read(buf)
if err!=nil{
fmt.Println("read err",err)
return
}
messsage:=buf[:n]
fmt.Println("%d服务器端发来信息%s",conn.RemoteAddr(),messsage)
}
func main() {
listen, err := net.Listen("tcp", "127.0.0.1")
if err != nil {
fmt.Println("listen err", err)