गो-रूटीन निष्पादन में बाधा डालना (*TCPListener) स्वीकार करना
गो में एक टीसीपी सर्वर बनाते समय, आपको ग्रेसफुली की चुनौती का सामना करना पड़ सकता है सर्वर को बंद करना और गोरोइन हैंडलिंग func (*TCPListener) को बाधित करना स्वीकार करें।
गो में, func (*TCPListener) कनेक्शन प्राप्त होने तक निष्पादन को अवरुद्ध करता है। इस गोरआउटिन को बाधित करने के लिए, आपको यह करना चाहिए:
नेट बंद करें। श्रोता:
एक्सेप्ट गोरआउटिन को बाधित करने की कुंजी नेट को बंद करना है। नेट से प्राप्त श्रोता। सुनना(...)। श्रोता को बंद करके, आप ऑपरेटिंग सिस्टम को संकेत देते हैं कि कोई और कनेक्शन प्राप्त नहीं होगा, जिससे एक्सेप्ट गोरोइन बाहर निकल जाता है।
गोरआउटिन से वापसी:
बंद करने के बाद श्रोता, सुनिश्चित करें कि आपका गोरोइन वापस आ जाए। यदि गोरोइन के पास एक्सेप्ट कॉल के बाद कोड है, तो यह निष्पादित करना जारी रखेगा और अनपेक्षित व्यवहार या त्रुटियों का कारण बन सकता है।
उदाहरण कोड:
package main
import (
"fmt"
"net"
)
func main() {
ln, err := net.Listen("tcp", ":8080")
if err != nil {
// Handle error
}
go func() {
for {
conn, err := ln.Accept()
if err != nil {
if err == net.ErrClosed {
return // Listener was closed
}
// Handle other errors
}
// Handle connection
conn.Close()
}
}()
fmt.Println("Press enter to stop...")
var input string
fmt.Scanln(&input)
ln.Close() // Close the listener, interrupting the Accept loop
}
यह कोड पोर्ट 8080 पर एक टीसीपीलिस्टनर बनाता है और एक गोरोइन लॉन्च करता है जो अनंत लूप में आने वाले कनेक्शन को संभालता है। जब उपयोगकर्ता एंटर दबाता है, तो प्रोग्राम श्रोता को बंद कर देता है और ब्लॉकिंग एक्सेप्ट कॉल को बाधित कर देता है, जिससे गोरोइन वापस आ जाता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3