[C#] เชื่อม Process ด้วย Named Pipe

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


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.