คำถามติดแท็ก network-programming

การเขียนโปรแกรมที่เกี่ยวข้องกับการสร้างและจัดการเครือข่ายรวมถึงการเพิ่มการเชื่อมต่อเครือข่ายไปยังโปรแกรม (ชุดของ)

13
คุณใช้อะไรเมื่อคุณต้องการ UDP ที่เชื่อถือได้?
หากคุณมีสถานการณ์ที่การเชื่อมต่อ TCP อาจช้าเกินไปและ 'การเชื่อมต่อ' UDP อาจไม่น่าเชื่อถือเกินไปคุณใช้อะไร? มีโปรโตคอล UDP มาตรฐานที่เชื่อถือได้หลายแบบคุณมีประสบการณ์อะไรบ้าง? โปรดหารือเกี่ยวกับหนึ่งโปรโตคอลต่อการตอบกลับและหากมีคนอื่นได้กล่าวถึงโปรโตคอลที่คุณใช้แล้วให้พิจารณาโหวตและใช้ความคิดเห็นเพื่ออธิบายอย่างละเอียดหากจำเป็น ฉันสนใจตัวเลือกต่างๆที่นี่ซึ่ง TCP อยู่ที่ปลายด้านหนึ่งของมาตราส่วนและ UDP อยู่ที่อีกด้านหนึ่ง มีตัวเลือก UDP ที่เชื่อถือได้หลากหลายและแต่ละองค์ประกอบของ TCP ไปยัง UDP ฉันรู้ว่าบ่อยครั้ง TCP เป็นตัวเลือกที่ถูกต้อง แต่การมีรายการทางเลือกมักจะมีประโยชน์ในการช่วยให้ได้ข้อสรุปดังกล่าว สิ่งต่างๆเช่น Enet, RUDP และอื่น ๆ ที่สร้างขึ้นบน UDP มีข้อดีข้อเสียหลายประการคุณเคยใช้มันมาแล้วมีประสบการณ์อย่างไรบ้าง? เพื่อหลีกเลี่ยงข้อสงสัยไม่มีข้อมูลเพิ่มเติมนี่เป็นคำถามสมมุติฐานและเป็นคำถามที่ฉันหวังว่าจะได้รับรายการคำตอบที่มีรายละเอียดเกี่ยวกับตัวเลือกและทางเลือกต่างๆที่มีให้สำหรับผู้ที่ต้องการตัดสินใจ

12
เหตุใดจึงเป็นไปไม่ได้โดยไม่ต้องพยายาม I / O เพื่อตรวจพบว่าซ็อกเก็ต TCP ถูกปิดอย่างสง่างามโดยเพียร์
จากคำถามล่าสุดฉันสงสัยว่าเหตุใดจึงเป็นไปไม่ได้ใน Java โดยไม่ต้องพยายามอ่าน / เขียนบนซ็อกเก็ต TCP เพื่อตรวจสอบว่าเพียร์ปิดซ็อกเก็ตอย่างสง่างาม? ดูเหมือนว่าจะเป็นเช่นนี้ไม่ว่าจะใช้พรี NIO Socketหรือ NIO SocketChannelก็ตาม เมื่อเพียร์ปิดการเชื่อมต่อ TCP อย่างสง่างาม TCP สแต็กทั้งสองด้านของการเชื่อมต่อจะรู้เกี่ยวกับข้อเท็จจริง ฝั่งเซิร์ฟเวอร์ (หนึ่งที่บำเพ็ญปิดระบบ) สิ้นสุดลงในรัฐFIN_WAIT2ในขณะที่ฝั่งไคลเอ็นต์ (หนึ่งที่ไม่ชัดเจนตอบสนองต่อการปิดเครื่อง) CLOSE_WAITจะสิ้นสุดลงในรัฐ เหตุใดจึงไม่มีเมธอดในSocketหรือSocketChannelที่สามารถสอบถามสแต็ก TCP เพื่อดูว่าการเชื่อมต่อ TCP พื้นฐานถูกยุติหรือไม่ สแต็ก TCP ไม่ให้ข้อมูลสถานะดังกล่าวหรือไม่? หรือเป็นการตัดสินใจออกแบบเพื่อหลีกเลี่ยงการโทรเข้าเคอร์เนลที่มีราคาแพง? ด้วยความช่วยเหลือของผู้ใช้ที่ได้โพสต์คำตอบสำหรับคำถามนี้แล้วฉันคิดว่าฉันเห็นว่าปัญหาอาจมาจากไหน ด้านที่ไม่ได้ปิดการเชื่อมต่ออย่างชัดเจนจะสิ้นสุดลงในสถานะ TCP CLOSE_WAITหมายความว่าการเชื่อมต่ออยู่ระหว่างการปิดระบบและรอให้ฝั่งนั้นออกการCLOSEดำเนินการของตัวเอง ฉันคิดว่ามันยุติธรรมพอที่isConnectedจะส่งคืนtrueและisClosedคืนสินค้าfalseแต่ทำไมถึงไม่มีบางอย่างเช่นisClosing? ด้านล่างนี้คือคลาสทดสอบที่ใช้ซ็อกเก็ต pre-NIO แต่จะได้ผลลัพธ์ที่เหมือนกันโดยใช้ NIO import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static …

3
UNIX nonblocking I / O: O_NONBLOCK เทียบกับ FIONBIO
ในทุกตัวอย่างและการสนทนาที่ฉันใช้ในบริบทของการเขียนโปรแกรมซ็อกเก็ต BSD ดูเหมือนว่าวิธีที่แนะนำในการตั้งค่าตัวอธิบายไฟล์เป็นโหมด I / O ที่ไม่ปิดกั้นคือการใช้O_NONBLOCKแฟล็กเพื่อfcntl()เช่น int flags = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, flags | O_NONBLOCK); ฉันทำการเขียนโปรแกรมเครือข่ายใน UNIX มานานกว่าสิบปีแล้วและใช้การFIONBIO ioctl()โทรเพื่อทำสิ่งนี้มาโดยตลอด: int opt = 1; ioctl(fd, FIONBIO, &opt); ไม่เคยคิดมากว่าทำไม เพิ่งเรียนรู้วิธีนี้ ใครมีความเห็นเกี่ยวกับข้อดีของข้อใดข้อหนึ่งหรือไม่? ฉันคิดว่าโลคัสการพกพานั้นแตกต่างกันบ้าง แต่ไม่รู้ว่าioctl_list(2)มันไม่ได้พูดถึงแง่มุมของแต่ละioctlวิธี

8
การเรียกฟังก์ชันแบบอะซิงโครนัสใน PHP
ฉันกำลังทำงานกับเว็บแอปพลิเคชัน PHP และฉันจำเป็นต้องดำเนินการกับเครือข่ายบางอย่างในคำขอเช่นดึงคนจากเซิร์ฟเวอร์ระยะไกลตามคำขอของผู้ใช้ เป็นไปได้ไหมที่จะจำลองพฤติกรรมแบบอะซิงโครนัสใน PHP เนื่องจากฉันต้องส่งข้อมูลบางส่วนไปยังฟังก์ชันและต้องการผลลัพธ์จากมัน รหัสของฉันเหมือน: <?php $data1 = processGETandPOST(); $data2 = processGETandPOST(); $data3 = processGETandPOST(); $response1 = makeNetworkCall($data1); $response2 = makeNetworkCall($data2); $response3 = makeNetworkCall($data3); processNetworkResponse($response1); processNetworkResponse($response2); processNetworkResponse($response3); /*HTML and OTHER UI STUFF HERE*/ exit; ?> การดำเนินการเครือข่ายแต่ละครั้งจะใช้เวลาประมาณ 5 วินาทีในการดำเนินการเพิ่มรวม 15 วินาทีให้กับเวลาตอบสนองของแอปพลิเคชันของฉันเนื่องจากฉันส่งคำขอ 3 ครั้ง ฟังก์ชัน makeNetworkCall () ทำตามคำขอ HTTP POST …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.