مقاطعة تنفيذ روتين Go (*TCPListener) قبول
أثناء إنشاء خادم TCP في Go، قد تواجه تحديًا بأمان إيقاف تشغيل الخادم ومقاطعة وظيفة معالجة goroutine (*TCPListener) قبول.
في Go، func (*TCPListener) قبول تنفيذ الكتل حتى يتم تلقي الاتصال. لمقاطعة هذا goroutine، يجب عليك:
إغلاق الشبكة. المستمع:
مفتاح مقاطعة goroutine القبول هو إغلاق الشبكة.المستمع تم الحصول عليه من net. يستمع(...). من خلال إغلاق المستمع، فإنك تشير إلى نظام التشغيل بأنه لن يتم استقبال المزيد من الاتصالات، مما يتسبب في خروج قبول goroutine.
العودة من Goroutine:
بعد الإغلاق أيها المستمع، تأكد من عودة goroutine الخاص بك. إذا كان goroutine يحتوي على رمز يتبع استدعاء القبول، فسوف يستمر في التنفيذ وقد يتسبب في سلوك أو أخطاء غير مقصودة.
مثال على الكود:
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
}
يقوم هذا الرمز بإنشاء TCPListener على المنفذ 8080 ويقوم بتشغيل goroutine الذي يتعامل مع الاتصالات الواردة في حلقة لا نهائية. عندما يضغط المستخدم على زر الإدخال، يغلق البرنامج المستمع ويقاطع مكالمة قبول الحظر، مما يتسبب في عودة goroutine. تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3