blog ตอนนี้เป็นการอธิบาย Named Pipe ที่ผมได้เลือกเอามาใช้แก้ปัญหาของ Legacy System โดยผมแยกเขียนเป็น 2-3 blog
Pipe คือ อะไร ?
- วิธีการหนึ่งที่ใช้เปิดให้ตัว Process มันสามารถสื่อสารกันได้ โดยมีศัพท์ทางการ Inter-process communication (IPC)
- สำหรับ IPC มีวิธีการ Implement ได้หลายแบบ ยกตัวอย่าง เช่น
- File : Process A เขียน TextFile แล้วรอให้อีก Process มาอ่าน
- Shared memory
- Message passing
- Pipe (Anonymous pipe / Named Pipe )
- Mapped Memory
- Sockets
- Remote Procedural calls (RPCs)
- Pipe ไม่ใช่เทคโนโลยีที่ใหม่ เป็นอะไรที่เก่าแก่พอสมควร
- มีการใช้งานบนหลากหลาย OS : Windows / Linux / Unix มีหมด
- และมีหลายภาษาเอาไปพัฒนาต่อยอด เช่น VB6 / C++ / .NET Framework / Python มี Library ช่วยให้พัฒนาได้รวดเร็วครับ
- Feature: Clip Board ที่เราใช้ Copy File จาก web บน google chrome ไปยัง MS Word เป็นอีก 1 ตัวอย่างของ IPC เช่นกันครับ
.NET Pipe
- สำหรับ .NET Framework มีตัว Pipe ให้ใช้งาน โดยอยู่ใน Namespace System.IO.Pipes
- System.IO.Pipes เตรียม Implementation ของ Pipe ไว้ 2 แบบ
- Anonymous Pipe : One-way communication / สื่อสารบนเครื่องเดียวกัน ทำงานแบบ 1 ต่อ 1
- Named Pipe : Two-way communication / สื่อสารระหว่างเครื่อง รองรับ Multiple Client/Process ด้วย
- กลุ่ม Security : เพื่อเอามาจัดการ Pipe ให้สอดคล้องกับ Policy / สิทธิที่ได้รับครับ
- ตัวที่ผมเลือกใช้ Named Pipe เพราะ ดูยืดหยุ่นกว่า Anonymous Pipe น่าจะไปปรับใช้งานได้ในแบบครับ ถ้าต่อเครื่องเดียวกันก็แต่กำหนด remote เป็น \\.\\pipe (localhost)ก็จบครับ เพิ่มเติมเรื่อง Thread ให้เป็นแบบ Multiple Instance
.NET Named Pipe
ตัว Named Pipe มีแนวทาง Implement 2 แบบ
- Single Pipe Instance : เหมือน Queue รับงานแบบ FIFO ถ้า Client ส่ง Message ขึ้นมาทำงานตามลำดับไปครับ ข้อเสีย ถ้ามี Client มา Request เยอะๆ อาจจะเจอ Timeout ได้
- Multiple Pipe Instance : สร้าง Instance ของ Pipe ตาม Request ที่ส่งมาเลยครับ ข้อดีสามารถทำงานหลายๆอย่างพร้อมๆกันได้ครับ แต่ต้องมากำหนด Limit ของ Instance ว่าจะมีได้สูงสุดเท่าไหร่ครับ
งานที่ผมเลือกใช้เป็น Multiple Pipe Instance โดยใน Blog ตอนต่อไปเล่าว่า Implement งานได้อย่างไร และทำไมถึงต้องใช้งานครับ
Reference
- Pipe Operations in .NET | Microsoft Docs
- Inter-process communication - Wikipedia
- Development With A Dot - Local Machine Interprocess Communication with .NET (asp.net)
- Inter-Process Communication (c-sharpcorner.com)
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.