package main
import (
"encoding/csv"
"fmt"
"os"
"strconv"
"sync"
"time"
)
type Server struct {
}
func (server *Server) Connect() chan []string {
session := make(chan []string, 128)
go func(c chan []string) {
file, _ := os.OpenFile("./test.csv", os.O_CREATE|os.O_TRUNC, 0666)
defer file.Close()
writer := csv.NewWriter(file)
defer file.Close()
for {
strs := <-c
if strs[0] == "CLOSE" {
writer.Write(strs)
writer.Flush()
fmt.Println("结束通信")
break
}
writer.Write(strs)
writer.Flush()
}
}(session)
fmt.Println("建立连接成功!")
return session
}
func NewServer() *Server {
return &Server{
}
}
type Client struct {
conn chan []string
}
func NewClient(server *Server) *Client {
c := server.Connect()
return &Client{
c}
}
func (client *Client) Send(strs []string) {
client.conn <- strs
}
var wp sync.WaitGroup
func main() {
server := NewServer()
client := NewClient(server)
for i := 0; i < 10000; i++ {
wp.Add(1)
go func() {
defer wp.Done()
client.Send([]string{
"hello", strconv.Itoa(i)})
}()
}
wp.Wait()
go client.Send([]string{
"CLOSE"})
time.Sleep(time.Duration(1) * time.Second)
}