WordPress สามารถสร้างขึ้นเพื่อรองรับ websockets ได้หรือไม่?


18

Websocketsเป็นเทคโนโลยีที่ล้ำสมัยและทันสมัยซึ่งถูกรวมไว้ใน HTML5 โดยทั่วไปคุณสามารถเปิด websocket เพื่อเปิดใช้งานการสื่อสาร 2 ทางแบบต่อเนื่องกับเว็บเซิร์ฟเวอร์ ไคลเอ็นต์ (ส่วนต่อประสานผู้ใช้) สามารถส่งข้อความได้เองและเซิร์ฟเวอร์ก็สามารถส่งข้อความได้เช่นกัน

เทคโนโลยีที่มีอยู่ (JavaScript) ต้องการทุกอย่างที่จะเริ่มต้นโดยไคลเอนต์ - เซิร์ฟเวอร์ไม่สามารถส่งอะไรไปยังไคลเอนต์ที่ลูกค้าไม่ได้ร้องขอ ดังนั้นสคริปต์จะต้องมีการรีเฟรชอย่างต่อเนื่องและขอข้อมูลใหม่ที่อาจไม่มีการเปลี่ยนแปลง เว็บซ็อกเก็ตทำงานได้มากกว่าบนพื้นฐาน " พุช " และให้ข้อมูลใหม่ ๆ

น่าเสียดายที่การใช้งาน websocket ส่วนใหญ่ (ทั้งหมดที่ฉันสามารถหาได้) นั้นต้องการแอปพลิเคชันเซิร์ฟเวอร์เฉพาะในการทำงาน ผู้คนจะเรียกใช้ Apache บนพอร์ต 80 และ 443 (http และ https) และเรียกใช้ระบบอื่น (โดยทั่วไปคือ Node.js) บนพอร์ตอื่น (เช่น 8000 หรือ 8080) เพื่อจัดการคำขอ websocket

เห็นได้ชัดว่าใช้งานได้ แต่ก็มีข้อเสียอยู่บ้าง

ฉันมีปลั๊กอินที่ฉันต้องการสร้างที่จะได้ประโยชน์อย่างมากจากการใช้ websockets ภายใน WordPress แต่ถ้าผู้ใช้ต้องการติดตั้งเว็บเซิร์ฟเวอร์ตัวที่สอง (โดยปกติจะเป็นไปไม่ได้สำหรับคนที่ใช้โฮสติ้งที่ใช้ร่วมกัน) มันจะไม่ทำงานเป็นปลั๊กอิน

ดังนั้นสำหรับผู้ที่มีประสบการณ์คุณจะทำให้ WordPress เข้ากันได้กับ websockets อย่างไร คุณจะทำให้ WordPress จัดการกับการสื่อสารด้วยตัวเองหรือรวมสคริปต์เซิร์ฟเวอร์ขนาดเล็กตัวอื่นเข้ากับปลั๊กอิน หากคุณทำสิ่งนี้ไปแล้วคุณจะทำให้สำเร็จโดยไม่ทำให้ WordPress แตกตัวเองได้อย่างไร

ทรัพยากรที่เป็นไปได้?


อัปเดต 9/21/11

ด้วยการพูดถึงว่า Apache (เซิร์ฟเวอร์ที่ติดตั้งบ่อยที่สุดสำหรับการใช้ WP บนโฮสต์ที่ใช้ร่วมกัน) ไม่สามารถจัดการ websockets ได้จริง ๆ ฉันสงสัยเกี่ยวกับทางเลือกอื่น ปลั๊กอินหลายตัว (JetPack เป็นต้น) พูดคุยกับบริการภายนอกหรือ API เพื่อสร้างเนื้อหา

สถิติร้องขอเนื้อหาจาก Automattic Akismet ส่งข้อมูลไปมาจากเซิร์ฟเวอร์ภายนอก หลังจากกำหนดส่งเนื้อหาในเวลาเผยแพร่ เครื่องมือ SEO บางอย่างส่งสิ่งที่ไปมาผ่านทางระบบภายนอก

ดังนั้นเพื่อเป็นอีกทางเลือกหนึ่งในการสร้างรหัส websocket ภายในปลั๊กอิน WordPress เป็นไปได้ไหมที่จะให้บริการ websocket ในตำแหน่งกลางและมีส่วนหน้าของ WordPress โต้ตอบกับสิ่งนั้นแทน


3
บรรทัดล่างคือ: ถ้าเว็บซ็อกเก็ตทำงานได้ไม่ดีกับเว็บเซิร์ฟเวอร์เนทีฟคุณจะไม่สามารถทำได้อย่างง่ายดายด้วยเว็บเซิร์ฟเวอร์นั้น นี่ไม่ใช่ปัญหาเฉพาะของ WordPress ตามที่คุณระบุไว้ websockets ต้องการเซิร์ฟเวอร์แยกต่างหากเช่น node.js หรือบางอย่างพวกเขาไม่สามารถทำงานกับ Apache ได้เป็นอย่างดี ดังนั้นปัญหาของคุณไม่ได้เป็นหนึ่งใน "ฉันจะทำให้มันเข้ากันได้กับ WordPress" ได้อย่างไรฉันจะทำให้มันทำงานบนโฮสติ้งตัวหารร่วมที่ต่ำที่สุด "ซึ่งเป็นปลาอื่น ๆ
อ็อตโต

สามารถเพิ่มการรองรับ WebSocket ใน WordPress core ด้วยเซิร์ฟเวอร์ WebSocket ในตัวและจุดสิ้นสุดอย่าง admin-ajax.php ใช่ไหม? นอกจากนี้ยังมีแบ็กเอนด์ JavaScript / frontend / Node.js แบ็กเอนด์ไลบรารี Socket.IO สำหรับ WebSocket พร้อมโพลเป็นทางเลือกซึ่งพัฒนาโดย Automattic ซึ่งเป็น บริษัท หลัง WordPress
baptx

คำตอบ:


8

WebSockets ใช้โปรโตคอล websockets: WS: /example.com/yourscript.js และเปิดการเชื่อมต่อแบบซิงโครนัส - หมายถึงการเชื่อมต่อนั้นถูกเปิดไว้และทุ่มเทให้กับเบราว์เซอร์

เซิร์ฟเวอร์ httpd เช่น apache2 (ใช้โดยผู้ให้บริการโฮสต์ที่ใช้ร่วมกันส่วนใหญ่) ใช้โปรโตคอล http: http://example.com/yourscript.jsและเปิดการเชื่อมต่อแบบอะซิงโครนัส - หมายความว่าไม่มีการเชื่อมต่อใด ๆ ถูกเปิดระหว่างเซิร์ฟเวอร์และเบราว์เซอร์ (คุณสามารถยืดอายุการเชื่อมต่อที่เปิดได้อย่างสุภาพโดยการตั้งค่าพารามิเตอร์การกำหนดค่าบางอย่าง - แต่โดยทั่วไปแล้วมันเป็นแบบอะซิงโครนัส)

ดังที่คุณสามารถจินตนาการได้การรักษาการเชื่อมต่อแบบเปิดระหว่างเบราว์เซอร์และเซิร์ฟเวอร์อุทิศทรัพยากรเซิร์ฟเวอร์ให้กับการเชื่อมต่อเบราว์เซอร์แต่ละครั้งมากขึ้นดังนั้นจึงต้องเสียภาษีทรัพยากรเซิร์ฟเวอร์มากกว่าการทิ้งการเชื่อมต่อหลังจากคำขอแต่ละครั้ง ผู้ให้บริการโฮสติ้งที่ใช้ร่วมกันนั้นไม่เข้าใจอย่างถ่องแท้ที่จะสนับสนุน WS เกี่ยวกับโฮสติ้งที่ใช้ร่วมกัน

ในขณะที่โฮสต์ที่ใช้ร่วมกันบางตัวอาจติดตั้ง mod_python ดังนั้นจึงอนุญาตให้ผู้ใช้ปลั๊กอินของคุณทำงาน pywebsocketเอกสารของ Pywebsocket จะระบุอย่างชัดเจนว่า "pywebsocket มีไว้สำหรับการทดสอบหรือเพื่อการทดลอง"

ดังนั้นในขณะที่บางคนอาจนึกภาพปลั๊กอินที่รวมรหัสไพ ธ อนเพื่อสร้างเซิร์ฟเวอร์ pywebsocket ที่ได้รับจากเซิร์ฟเวอร์ apache ที่สนับสนุนฉันไม่เชื่อว่ามันจะมีเหตุผลที่จะเผยแพร่ปลั๊กอินที่ทำเช่นนั้น


มีไลบรารี่ PHP ที่ตรงไม่กี่ตัวที่สนับสนุน websockets ไม่ว่าพวกเขาจะทำงานอย่างมีประสิทธิภาพภายใน Apache จะเป็นการทดสอบที่น่าสนใจ ดูการอัปเดตของฉันสำหรับลิงก์ ...
EAMann

3

ในการตอบสนองต่อการปรับปรุงของคุณในความคิดของฉันและจากการวิจัยที่ฉันได้ทำไปนั้นจะเป็นตัวเลือกที่ดีที่สุด ยิ่งไปกว่านั้นคือการสร้างปลั๊กอินส่วนหน้าและสร้างบริการ websocket ภายนอกเพื่อพูดคุยกับปลั๊กอินและคิดค่าธรรมเนียมสำหรับมันเพื่อให้คุณสามารถสร้างรายได้จากแนวคิดของคุณหากคุณต้องการ คุณยังสามารถระบุซอร์สโค้ดสำหรับบริการ websocket และสร้างการตั้งค่าในปลั๊กอินเพื่อกำหนดตำแหน่งที่ (อยู่ที่โดเมน / IP และพอร์ตใด) ที่บริการ websocket ตั้งอยู่


2

ลืม "คลาสสิค" apache2 - apache2-mpm-prefork - เพื่อจุดประสงค์นี้ อาจจะเป็น apache2-mpm-event สามารถจัดการสิ่งนี้ได้ แต่มันก็เป็นการทดลอง เนื่องจาก apache2 ไม่ได้เป็นตัวขับเคลื่อนเหตุการณ์ปัญหาที่อธิบายโดย @marfarma จึงมีอยู่ คุณจะต้องมีเว็บเซิร์ฟเวอร์ที่ขับเคลื่อนด้วยเหตุการณ์สำหรับการให้บริการประเภทนี้เช่นเชโรกีหรือ nginx

nginxสามารถเป็นประโยชน์อย่างแท้จริงสำหรับ WordPress (เนื่องจาก wordpress.com ใช้เป็นเซิร์ฟเวอร์ของพวกเขาด้วย) และสามารถพร็อกซีคำขอที่ระบุไปยังบริการ node.js เช่น

ตัวอย่างบางส่วนในหัวข้อ:

ฉันยังทำกวดวิชาขนาดเล็กสำหรับ Nginx + PHP-FPM + ติดตั้ง


การลืมวิธีการ "คลาสสิค" ไม่ใช่ตัวเลือกสำหรับการสร้างปลั๊กอินที่ติดตั้งง่ายสำหรับผู้ใช้ทั่วไป ใช่การใช้ nginx, cherokee หรือ node.js เพื่อให้บริการสิ่งต่าง ๆ จากเซิร์ฟเวอร์เป็นตัวเลือก แต่คุณไม่สามารถใส่มันลงไปในปลั๊กอิน readme และหวังว่าผู้ใช้จะก) เข้าใจหรือข) สามารถทำอะไรเกี่ยวกับ มัน.
EAMann

apache2-mpm-prefork ไม่ได้ถูกออกแบบมาเพื่อให้สามารถจัดการกับการใช้งานประเภทนี้ได้ มีปลั๊กอินที่ต้องใช้ memcached, APC เป็นต้นดังนั้นสิ่งนี้จะต้องใช้เว็บเซิร์ฟเวอร์ตามเหตุการณ์เท่านั้น นี่เป็นข้อกำหนดแบ็กเอนด์, mpm-prefork และ mpm-worker ไม่ใช่สำหรับสิ่งนี้
petermolnar

1

โซลูชันที่เป็นไปได้อีกอย่างหนึ่งคือการใช้ผู้ให้บริการซ็อกเก็ตเว็บของบุคคลที่สามฉันได้ลองเล่นกับ Pusher (http://pusher.com/) สักหน่อยมันมี API ที่คุณสามารถใช้งานได้กับสิ่งที่คุณต้องการ กำลังพยายามทำ ฉันได้ไตร่ตรองแล้วว่าจะใช้มันอย่างไรในเว็บไซต์ WordPress ของฉันเอง

ข้อเสียที่เป็นไปได้คือคนอื่น ๆ ที่พยายามใช้ปลั๊กอินของคุณจะต้องมีบัญชี Pusher เพื่อให้มันใช้งานได้ การทำงานกับมันง่ายกว่าการติดตั้งเซิร์ฟเวอร์ Web Sockets ของคุณเองและต้องดูแลรักษาซึ่งจะเป็นประโยชน์จริง ๆ เมื่อผู้อื่นพยายามใช้ปลั๊กอินของคุณ


0

คำตอบสั้น ๆ คือ: ใช่มันเป็นไปได้ ฉันอาจจะมองหาบางสิ่งที่มีการกระจายมากกว่าจุด VPS ที่ล้มเหลวเพียงจุดเดียวที่คุณโฮสต์ อาจมองไปที่ระบบ EC2 ที่มีโหลดบาลานซ์หรือบางระบบ? (ฉันสมมติว่าคุณมีรายได้ที่มอบให้เพื่อความสะดวกสบายเช่นนั้นยิ้ม )


1
"กระแสรายได้ที่จะมอบให้เพื่อความสะดวกสบาย" ... นั่นน่าจะดี :-)
EAMann
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.