ระบบแชทเซิร์ฟเวอร์/แชทตามโปรโตคอล AMQP (นายหน้าข้อความ RABBITMQ) เขียนใน Python โดยใช้พายุทอร์นาโดและ RabbitMQ
ลิงค์: http://rabbitchat.readthedocs.io/en/latest/index.html
ลิงค์: https://pypi.python.org/pypi/rabbitchat
| ผู้เขียน: | Anirban Roy Das |
|---|---|
| อีเมล: | [email protected] |
| ลิขสิทธิ์ (c): | 2017, Anirban Roy Das <[email protected]> |
ตรวจสอบไฟล์ rabbitChat/LICENSE สำหรับการแจ้งลิขสิทธิ์เต็มรูปแบบ
Rabbitchat เป็นเซิร์ฟเวอร์แชทที่ง่ายมากซึ่งสามารถตั้งค่าได้ในพื้นที่เพื่อแชทใน LAN ของคุณ สนับสนุนทั้ง การแชทสาธารณะ ในหมู่ผู้เข้าร่วมทั้งหมดที่เชื่อมต่อพร้อมกันในเวลาใดเวลาหนึ่งและยัง แชทส่วนตัว ระหว่างผู้เข้าร่วมแต่ละคน
มันใช้โปรโตคอล AMQP เพื่อใช้ระบบส่งข้อความแบบเรียลไทม์ AMQP ถูกนำไปใช้ในหลายภาษาและในซอฟต์แวร์หลายแห่งซึ่งครั้งหนึ่งเคยเป็น RabbitMQ ซึ่งเป็นนายหน้าข้อความที่ใช้โปรโตคอล AMQP
การเชื่อมต่อถูกสร้างขึ้นโดยใช้โปรโตคอล SOCKJS SOCKJS มีการใช้งานในหลายภาษาโดยเฉพาะอย่างยิ่งใน JavaScript เพื่อพูดคุยกับเซิร์ฟเวอร์แบบเรียลไทม์ซึ่งพยายามสร้างการเชื่อมต่อแบบสองทิศทางแบบดูเพล็กซ์ระหว่าง ไคลเอนต์ (เบราว์เซอร์) และ เซิร์ฟเวอร์ เซิร์ฟเวอร์เธอควรใช้โปรโตคอล Sockjs ดังนั้นการใช้ห้องสมุด Sockjs-tornado ซึ่งเปิดเผยโปรโตคอล Sockjs ในเซิร์ฟเวอร์พายุทอร์นาโด
ครั้งแรกที่พยายามสร้างการเชื่อมต่อ WebSocket และถ้ามันล้มเหลวก็จะสลับกับกลไกการขนส่งอื่น ๆ เช่น Ajax , การสำรวจระยะยาว ฯลฯ หลังจากการเชื่อมต่อถูกสร้างขึ้นแล้วเซิร์ฟเวอร์พายุทอร์นาโด ** ( Sockjs -tornado) ** เชื่อมต่อกับ RabbitMQ
ดังนั้นการเชื่อมต่อคือ เว็บเบราว์เซอร์ ไปยัง พายุทอร์นาโด ถึง RabbitMQ และในทางกลับกัน
| Sockjs-client: | ไคลเอนต์ JavaScript ขั้นสูง |
|---|---|
| พายุทอร์นาโด: | Async Python Web Library + เว็บเซิร์ฟเวอร์ |
| Sockjs-tornado: | การใช้งาน Sockjs WebSocket Server สำหรับพายุทอร์นาโด |
| AMQP: | โปรโตคอลการเข้าคิวข้อความล่วงหน้าที่ใช้ในมิดเดิลแวร์ที่มุ่งเน้นข้อความ |
| Pika: | AMQP Python Client Library |
| RabbitMQ: | นายหน้าข้อความที่ใช้ AMQP |
| pytest: | ไลบรารีการทดสอบ Python และนักวิ่งทดสอบด้วยการทดสอบที่ยอดเยี่ยม |
| pytest-flask: | ปลั๊กอิน Pytest สำหรับแอพ Flask เพื่อทดสอบแอพ Fask โดยใช้ไลบรารี PyTest |
| การทดสอบของ Uber: | ทดสอบไลบรารีคู่สำหรับ Python ทางเลือกที่ดีสำหรับห้องสมุดเยาะเย้ย |
| เจนกินส์ (ไม่บังคับ): | เซิร์ฟเวอร์ CI ที่โฮสต์ตนเอง |
| Travis-CI (ไม่บังคับ): | เซิร์ฟเวอร์ CI ที่โฮสต์ฟรีสำหรับ projecs โอเพนซอร์ซ |
| นักเทียบท่า: | เครื่องมือคอนเทนเนอร์สำหรับ DevOps ที่ดีกว่า |
มีการติดตั้งสองประเภท หนึ่งที่ใช้ rabbitchat เป็นไบนารีโดยการติดตั้งจาก PIP และเรียกใช้แอปพลิเคชันในเครื่องท้องถิ่นโดยตรง อีกวิธีหนึ่งคือการเรียกใช้แอปพลิเคชันจาก Docker ดังนั้นอีกชุดหนึ่งของขั้นตอนการติดตั้งสำหรับเคสใช้ Docker
หากต้องการป้องกันความลับและการรั่วไหลของข้อมูลที่เป็นความลับผ่านทาง Git ของคุณมุ่งมั่นที่จะ repo สาธารณะ GitHub ตรวจสอบ git-secrets
โครงการ Git Secrets นี้ช่วยในการป้องกันการรั่วไหลของการรั่วไหลโดยไม่ได้ตั้งใจ
ดูสิมีเทคโนโลยีมากมายที่ใช้ที่กล่าวถึงในข้อกำหนดด้านเทคโนโลยีและการพึ่งพาเป็นเพียงสอง นี่คือพลังของนักเทียบท่า
ขั้นตอนที่ 1 - ติดตั้ง Docker
ติดตามโครงการ GitHub อื่นของฉันซึ่งทุกสิ่งที่เกี่ยวข้องกับ DevOps และสคริปต์ถูกกล่าวถึงพร้อมกับการตั้งค่าการพัฒนาสภาพแวดล้อมเพื่อใช้ Docker ถูกกล่าวถึง
- โครงการ: https://github.com/anirbanroydas/devops
ขั้นตอนที่ 2 - ติดตั้ง Make
# (Mac OS) $ BREW ติดตั้ง Automake # (Ubuntu) $ sudo apt-get update การติดตั้ง $ sudo apt-get make
ขั้นตอนที่ 3 - ติดตั้งการพึ่งพา
ติดตั้งการพึ่งพาต่อไปนี้ในเครื่องพัฒนาในพื้นที่ของคุณซึ่งจะใช้ในสคริปต์ต่างๆ
$ pip ติดตั้ง rabbitchat
หากการพึ่งพาข้างต้นไม่ได้รับการติดตั้งโดยคำสั่งด้านบนให้ใช้ขั้นตอนด้านล่างเพื่อติดตั้งทีละตัว
ขั้นตอนที่ 1 - ติดตั้ง PIP
ทำตามวิธีด้านล่างสำหรับการติดตั้ง PIP หนึ่งในนั้นอาจช่วยให้คุณติดตั้ง PIP ในระบบของคุณ
- วิธีที่ 1 - https://pip.pypa.io/en/stable/installing/
- วิธีที่ 2- http://ask.xmodulo.com/install-pip-linux.html
- วิธีที่ 3 - หากคุณติดตั้ง Python บน Mac OS X ผ่าน
brew install pythonจากนั้น PIP จะถูกติดตั้งแล้วพร้อมกับ Pythonขั้นตอนที่ 2 - ติดตั้งพายุทอร์นาโด
$ pip ติดตั้งพายุทอร์นาโดขั้นตอนที่ 3 - ติดตั้ง Sockjs -tornado
$ PIP ติดตั้ง Sockjs Tornadoขั้นตอนที่ 4 - ติดตั้ง pika
$ pip ติดตั้ง pikaขั้นตอนที่ 5 - ติดตั้ง rabbitmq
สำหรับ ผู้ใช้
Mac1. Brew ติดตั้ง RabbitMQ
$ brew ติดตั้ง rabbitmq
- กำหนดค่า RABBITMQ ไปที่ลิงค์นี้ลิงค์นี้และสิ่งนี้
สำหรับ ผู้ใช้
Ubuntu/Linux1. เปิดใช้งานที่เก็บแอปพลิเคชัน RabbitMQ
$ echo "deb http://www.rabbitmq.com/debian/ การทดสอบหลัก" >> /etc/apt/sources.list2. เพิ่มคีย์การตรวจสอบสำหรับแพ็คเกจ
$ wget -o http://www.rabbitmq.com/rabbitmq-signing-key-public.asc | Sudo Apt -Key Add -3. อัปเดตแหล่งที่มาด้วยการเพิ่มใหม่ของเราจากด้านบน
การอัปเดต $ apt-get4. และสุดท้ายดาวน์โหลดและติดตั้ง RabbitMQ
$ sudo apt-get ติดตั้ง rabbitmq-server
- กำหนดค่า RABBITMQ ไปที่ลิงค์นี้ลิงค์นี้และสิ่งนี้
หากคุณกำลังใช้โครงการในการตั้งค่า CI (เช่น Travis, Jenkins) จากนั้นทุกครั้งที่ผลักดันไปยัง GitHub คุณสามารถตั้งค่า Travis Build หรือ Jenkins ของคุณได้ เทรวิสจะใช้ไฟล์ .travis.yml และ Jenknis จะใช้ Jenkinsfile เพื่อทำงานของพวกเขา ตอนนี้ในกรณีที่คุณใช้เทรวิสจากนั้นเรียกใช้คำสั่งการตั้งค่าเฉพาะของเทรวิสและสำหรับเจนกินส์เรียกใช้คำสั่งการตั้งค่าเฉพาะของเจนกินส์ก่อน คุณยังสามารถใช้ทั้งสองอย่างเพื่อเปรียบเทียบระหว่างประสิทธิภาพ
คีย์การตั้งค่าอ่านค่าจากไฟล์ .env ซึ่งมีตัวแปรสภาพแวดล้อมทั้งหมดส่งออก แต่คุณจะสังเกตเห็นไฟล์ env ตัวอย่างไม่ใช่ไฟล์. .env ตรวจสอบให้แน่ใจว่าได้คัดลอกไฟล์ env เป็น .env และ เปลี่ยน/แก้ไข ตัวแปรจริงด้วยค่าจริงของคุณ
ไฟล์ .env ไม่ได้มุ่งมั่นที่จะ GIT เนื่องจากมีการกล่าวถึงในไฟล์ .gitignore เพื่อป้องกันการรั่วไหลของข้อมูลที่เป็นความลับ
หลังจากที่คุณเรียกใช้คำสั่งการตั้งค่าคุณจะได้รับคีย์ที่ปลอดภัยจำนวนหนึ่ง คัดลอกไฟล์เหล่านั้นไปยังไฟล์กำหนดค่าของคุณก่อนดำเนินการต่อ
หมายเหตุ: นี่คือการตั้งค่าครั้งเดียว หมายเหตุ: ตรวจสอบสคริปต์การตั้งค่าภายใน scripts/ ไดเรกทอรีเพื่อทำความเข้าใจว่าตัวแปรสภาพแวดล้อมคืออะไรที่มีปุ่มเข้ารหัส หมายเหตุ: อย่าลืม คัดลอก คีย์ที่ปลอดภัยไปยัง .travis.yml หรือ Jenkinsfile ของคุณ
หมายเหตุ: หากคุณไม่ต้องการทำสำเนาของไฟล์ env ไปยัง .env และเปลี่ยนค่าตัวแปรใน .env ด้วยค่าที่แท้จริงของคุณคุณสามารถแก้ไขสคริปต์ travis-setup.sh หรือ jenknis-setup.sh และอัปเดตค่าของพวกเขาโดยตรง สคริปต์อยู่ในไดเรกทอรี scripts/ ระดับโครงการ
สำคัญ: คุณต้องเรียกใช้สคริปต์ travis-setup.sh หรือสคริปต์ jenkins-setup.sh ในเครื่องท้องถิ่นของคุณก่อนที่จะปรับใช้กับเซิร์ฟเวอร์ระยะไกล
ขั้นตอนเหล่านี้จะเข้ารหัสตัวแปรสภาพแวดล้อมของคุณเพื่อรักษาความปลอดภัยข้อมูลที่เป็นความลับของคุณเช่นคีย์ API, คีย์ที่ใช้ Docker, ปรับใช้คีย์เฉพาะ
$ Make Travis-Setup
ขั้นตอนเหล่านี้จะเข้ารหัสตัวแปรสภาพแวดล้อมของคุณเพื่อรักษาความปลอดภัยข้อมูลที่เป็นความลับของคุณเช่นคีย์ API, คีย์ที่ใช้ Docker, ปรับใช้คีย์เฉพาะ
$ Make Jenkins-Setup
มีการใช้งานสองประเภท หนึ่งที่ใช้ rabbitchat เป็นไบนารีโดยการติดตั้งจาก PIP และเรียกใช้แอปพลิเคชันในเครื่องท้องถิ่นโดยตรง อีกวิธีหนึ่งคือการเรียกใช้แอปพลิเคชันจาก Docker ดังนั้นขั้นตอนการใช้งานอีกชุดหนึ่งสำหรับกรณีการใช้ Docker
หลังจากติดตั้งการพึ่งพาข้างต้นและเรียกใช้ ตัวเลือก (หากไม่ได้ใช้เซิร์ฟเวอร์ CI) หรือ จำเป็น (ถ้าใช้เซิร์ฟเวอร์ CI) ขั้นตอน การตั้งค่า CI จากนั้นเพียงเรียกใช้คำสั่งต่อไปนี้เพื่อใช้งาน:
คุณสามารถเรียกใช้และทดสอบแอพในเครื่องพัฒนาในพื้นที่ของคุณหรือคุณสามารถเรียกใช้และทดสอบโดยตรงในเครื่องระยะไกล คุณยังสามารถเรียกใช้และทดสอบในสภาพแวดล้อมการผลิต
คำสั่งด้านล่างจะเริ่มต้นทุกครั้งในสภาพแวดล้อมการพัฒนา ในการเริ่มต้นในสภาพแวดล้อมการผลิต -prod ท้ายคำ สั่ง ทุกคำสั่ง
ตัวอย่างเช่นหากคำสั่งปกติ make start แล้วสำหรับสภาพแวดล้อมการผลิตให้ใช้ make start-prod ทำการปรับเปลี่ยนนี้สำหรับแต่ละคำสั่งที่คุณต้องการทำงานในสภาพแวดล้อมการผลิต
ข้อยกเว้น: คุณไม่สามารถใช้วิธีการข้างต้นสำหรับคำสั่งทดสอบคำสั่งทดสอบจะเหมือนกันสำหรับทุกสภาพแวดล้อม นอกจากนี้คำสั่ง make system-prune นั้นเป็นแบบสแตนด์อโลนโดยไม่มีการเปลี่ยนแปลงเฉพาะการผลิต (ยังคงเหมือนเดิมในทุกสภาพแวดล้อม)
เริ่ม applcation
$ ทำให้สะอาด $ Make Build $ ทำให้เริ่มต้น # หรือ $ docker -compose up -d
หยุดแอปพลิเคชัน
$ Make Stop # หรือ $ docker-compose stop
ลบและทำความสะอาดแอปพลิเคชัน
$ ทำให้สะอาด # หรือ $ docker -compose rm -force -v $ echo "y" | Prune System Docker
ระบบทำความสะอาด
$ Make System-Prune # หรือ $ echo "y" | Prune System Docker
เพื่อตรวจสอบบันทึกแอปพลิเคชันทั้งหมด
$ Make Check-logs # หรือ $ docker-compose logs--follow--tail = 10
เพื่อตรวจสอบบันทึกของแอพ Python
$ Make Check-Logs-App # หรือ $ docker-compose logs--follow--tail = 10 identidock
หลังจากติดตั้ง rabbitchat ผ่าน PIP เพียงแค่รันคำสั่งต่อไปนี้เพื่อใช้:
เซิร์ฟเวอร์ RabbitMQ
1. สำหรับ ผู้ใช้ Mac
# เริ่มตามปกติ $ rabbitmq-server # ถ้าคุณต้องการทำงานในพื้นหลัง $ rabbitmq-server-ดาดฟ้า # เริ่มใช้ Brew Rervices (ไม่ทำงานกับ TMUX) $ Brew Services RabbitMQ เริ่มต้น
2. สำหรับ ผู้ใช้ Ubuntu/LInux
# เริ่มตามปกติ $ rabbitmq-server # ถ้าคุณต้องการทำงานในพื้นหลัง $ rabbitmq-server-ดาดฟ้า # เริ่มใช้บริการ $ Service Rabbitmq-Server เริ่มต้น # หยุดใช้บริการ $ Service Rabbitmq-Server Stop # เพื่อรีสตาร์ทโดยใช้บริการ $ Service Rabbitmq-Server Retart # เพื่อตรวจสอบสถานะ $ Service RabbitMq-Server สถานะ
เริ่มเซิร์ฟเวอร์ Rabbitchat
$ rabbitchat [ตัวเลือก]
ตัวเลือก
| --ท่าเรือ: | หมายเลขพอร์ตที่เซิร์ฟเวอร์แชทจะเริ่ม |
|---|
ตัวอย่าง
$ rabbitchat -พอร์ต = 9191
หยุดเซิร์ฟเวอร์ Rabbitchat
คลิก Ctrl+C เพื่อหยุดเซิร์ฟเวอร์
หมายเหตุ: การทดสอบทำได้โดยใช้วิธี Docker เท่านั้น อย่างไรก็ตามมันไม่สำคัญว่าคุณจะเรียกใช้แอปพลิเคชันของคุณโดยใช้วิธี Docker หรือวิธีการสแตนด์อโลน การทดสอบเป็นอิสระจากมัน
ตอนนี้การทดสอบเป็นเรื่องหลักของโครงการ คุณสามารถทดสอบได้หลายวิธีคือการใช้คำสั่ง make ตามที่กล่าวไว้ในคำสั่งด้านล่างซึ่งทำให้ทุกอย่างเป็นไปโดยอัตโนมัติและคุณไม่จำเป็นต้องรู้อะไรอีกเช่นการใช้ไลบรารีหรือกรอบการทดสอบสิ่งที่การทดสอบเกิดขึ้นโดยตรงหรือผ่านคอนเทนเนอร์ docker หรืออาจเป็นสภาพแวดล้อมเสมือนจริงที่แตกต่างกันโดยใช้ tox ไม่จำเป็นต้องเป็นที่รู้จัก
ในทางกลับกันหากคุณต้องการควบคุมการทดสอบที่ดีคุณสามารถเรียกใช้งานได้โดยตรงไม่ว่าจะโดยใช้คำสั่ง pytest หรือผ่านคำสั่ง tox เพื่อเรียกใช้ในสภาพแวดล้อม Python ที่แตกต่างกันหรือโดยใช้คำสั่ง docker-compose เพื่อเรียกใช้การทดสอบที่แตกต่างกัน
แต่การเรียกใช้คำสั่ง Make นั้นเป็นสิ่งที่ต้องทำตามกลยุทธ์และวิธีการที่ได้รับการแนะนำสำหรับโครงการนี้
หมายเหตุ: TOX สามารถใช้งานได้โดยตรงโดยที่คอนเทนเนอร์ docker จะไม่ถูกใช้ แม้ว่าเราสามารถลองใช้ tox ภายในการทดสอบของเราที่เราใช้สำหรับการเรียกใช้การทดสอบโดย docker คำสั่ง make แต่จากนั้นเราจะต้องเปลี่ยน Dockerfile และติดตั้งการพึ่งพา python ทั้งหมดเช่น python2.7 , python3.x แล้วเรียก pytest คำสั่ง tox
ข้อแม้: ข้อแม้เพียงข้อเดียวของการใช้คำสั่ง Make โดยตรงและไม่ได้ใช้ tox คือเรากำลังทดสอบโครงการในสภาพแวดล้อม python เดียวเท่านั้น Nameley python 3.6
เพื่อทดสอบทุกอย่าง
$ ทำการทดสอบ
วิธีอื่นใด ๆ โดยไม่ต้องใช้ Make จะเกี่ยวข้องกับการเขียนคำสั่งมากมาย ดังนั้นใช้คำสั่ง Make โดยเฉพาะอย่างยิ่ง
เพื่อทำการทดสอบหน่วย
$ Make Test-unit
เพื่อทำการทดสอบส่วนประกอบ
$ ทำองค์ประกอบทดสอบ
เพื่อทำการทดสอบสัญญา
$ ทำสัญญาทดสอบ
เพื่อทำการทดสอบการรวม
$ ทำให้การทดสอบการรวมกัน
เพื่อดำเนินการจบสิ้น (e2e) หรือระบบหรือการยอมรับ UI หรือการทดสอบการทำงาน
$ make test-e2e # หรือ $ ทำให้ระบบทดสอบ # หรือ $ ทำให้การทดสอบ -ui-acceptance # หรือ $ ทำให้การทดสอบฟังก์ชั่น