gpt4 book ai didi

go - 连接在goroutine中关闭

转载 作者:行者123 更新时间:2023-12-01 22:14:05 27 4
gpt4 key购买 nike

我正在编写一个与套接字服务器连接的简单go程序。
我正在使用goroutine不断查找传入的消息。
但是内部goroutine连接被关闭。有人可以建议我发生什么事吗?

以下是我的测试客户

package main

import (
"fmt"
"net"
"os"
"encoding/json"
"bufio"
)

type test_user struct {
ID string
Conn net.Conn
Messages chan interface{}
}

func CreateTestUser(id string) test_user {
return test_user{id, nil, nil}
}

/*
1. Try connecting
2. Wait for connected packet
3. Send first packet (Init packet)
*/
func (user *test_user) Connect() {
conn, err := net.Dial(CONN_TYPE, CONN_HOST+":"+CONN_PORT)
if err != nil {
fmt.Println("Could not connect", err.Error())
os.Exit(1)
}
user.Conn = conn
user.Messages = make(chan interface{})
reader := bufio.NewReader(conn)
message, _ := reader.ReadBytes(DELIMITER)
user.SendMessage(InitPacket{TYPE_USER,user.ID})
//message, _ = reader.ReadBytes(DELIMITER)
//message, _ = reader.ReadBytes(DELIMITER) // If I uncomment these lines it will wait for new messages
//message, _ = reader.ReadBytes(DELIMITER)
go func() {
for {
var readErr error
message, readErr = reader.ReadBytes(DELIMITER) // this always returns error "Error on read read tcp 127.0.0.1:54694->127.0.0.1:3333: use of closed network connection"/

if readErr == nil {
var packet interface{}
error := json.Unmarshal(message, &packet)
if error != nil {
fmt.Println("Unable to parse message", string(message), error.Error())
}
user.Messages <- packet
} else {
fmt.Println("Error on read", readErr.Error())
}
}
}()
}

有人可以帮我吗我也是golang的新手,也请提出改进​​建议。

最佳答案

Connect之外查看更多代码是有帮助的。
Connect启动一个新的goroutine,但它不等待它-立即返回。 Connect返回后可以关闭连接吗?

通常,当您启动goroutine来处理连接时,您的“main” goroutine将继续等待其他事情-新连接和/或与每个连接goroutine进行握手。我怀疑这不是这里发生的事情。

关于go - 连接在goroutine中关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61523004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com