Vì vậy, tôi đang làm cho một máy chủ cho thang máy của tôi trong Go, và tôi đang chạy hàm "handler" như một goroutine với một kết nối TCP. Tôi muốn nó đọc từ một kết nối, và nếu không có tín hiệu được phát hiện trong một khoảng thời gian nhất định tôi muốn nó trả về lỗi.Làm thế nào tôi có thể thực hiện net.Đọc đầu vào trong golang?
func handler(conn net.Conn){
conn.SetReadTimeout(5e9)
for{
data := make([]byte, 512)
_,err := conn.Read(data)
}
}
Chừng nào tôi còn có một khách hàng gửi những thứ qua kết nối nó có vẻ là làm việc tốt, nhưng ngay sau khi khách hàng ngừng gửi các chức năng net.Read trả về EOF lỗi và bắt đầu vòng lặp không có chậm trễ nào .
Điều này có thể là cách Đọc được cho là hoạt động, nhưng ai đó có thể đề xuất cách khác để xử lý sự cố mà không phải đóng và mở kết nối mỗi lần tôi muốn đọc gì đó?
conn.SetReadTimeout (5e9) không phải là những gì bạn muốn. SetReadTimeout dự kiến thời gian tuyệt đối, không phải là thời lượng. Hãy thử chỉ định là "time.Seconds * 10" và trình biên dịch sẽ khiếu nại. Những gì bạn đang nói ở trên là bạn muốn kết nối với thời gian ra tại 5000 giây sau ngày 1 tháng 1 năm 1970. Vì vậy, nó sẽ không chờ đợi ở tất cả. Thay vào đó bạn muốn một cái gì đó để có hiệu lực của conn.SetReadTimeout (time.Now(). Add (time.Seconds * 10)) cho thời gian chờ mười giây. – Crunge