รองรับ PHP แบบเนทีฟสำหรับ Web Sockets หรือไม่

กำลังมองหาตัวอย่างการใช้งานเว็บซ็อกเก็ตประเภท Hello World:

นี่คือ Socket Create ข้อมูลอ้างอิงจาก php.net แต่ดูเหมือนว่าจะอยู่ในระดับที่ต่ำกว่า Web Sockets .

ฉันต้องการใช้ Web Sockets ดังที่แสดงไว้ที่นี่ใน caniuse.com ซึ่งขณะนี้ได้นำไปใช้กับเบราว์เซอร์หลักใหม่ทั้งหมด

การค้นหาโดย Google พบ ไซต์ Nets.TutsPlus ซึ่งฉัน สามารถใช้โค้ดตัวอย่าง JavaScript ได้...แต่ฉันต้องรู้วิธีการใช้งานฝั่งเซิร์ฟเวอร์ใน PHP ไม่ใช่ Java, Ruby หรือ Node.js ดังตัวอย่าง

PHP Socket Create เกี่ยวข้องหรือไม่ PHP รองรับ Web Sockets โดยกำเนิดหรือไม่ ฉันเดาว่าแค่จุดไปในทิศทางที่ถูกต้องสำหรับการใช้งาน PHP ก็จะช่วยได้

จริงๆ แล้วบทช่วยสอนมีลิงก์ที่เสียไปยัง phpwebsockets...นี่คือไลบรารี่ที่ควรใช้หรือไม่

Websockets.org มีแอปพลิเคชันทดสอบ แต่ไม่มีการกล่าวถึง PHP


person Community    schedule 30.08.2012    source แหล่งที่มา
comment
สิ่งนี้อาจช่วยได้: การเขียนโปรแกรมซ็อกเก็ต PHP ทำอย่างถูกวิธี   -  person ChocoDeveloper    schedule 30.08.2012
comment
Googling PHP Websockets ให้ผลลัพธ์มากมาย เช่น: socketo.me, flynsarmy.com/2012/02/php-websocket-chat-application-2-0, code.google.com/p/phpwebsocket   -  person scrappedcola    schedule 30.08.2012
comment
ฉันไม่เห็นทิศทางที่ชัดเจนเกี่ยวกับวิธีการเข้าถึง Web Sockets ใน PHP....ได้รับการรองรับโดยกำเนิดหรือฉันต้องการไลบรารีอื่น...คำถามแรกของฉันเกี่ยวกับวิธีการนำไปใช้หรือไม่....   -  person    schedule 30.08.2012
comment
ในการค้นหาของคุณ อย่าสับสนระหว่างซ็อกเก็ตกับซ็อกเก็ตเว็บ   -  person Brad    schedule 30.08.2012
comment
คำถามที่ยอดเยี่ยม นี่คือสิ่งที่ผมอยากถาม   -  person Gunah Gaar    schedule 08.04.2013


คำตอบ (2)


ไม่มีการสนับสนุนดั้งเดิมในแง่ของการมีออบเจ็กต์ PHP WebSocket มาตรฐานที่พร้อมใช้งาน

คุณจะต้องใช้ห้องสมุด

สิ่งต่อไปที่ต้องพิจารณาคือวิธีการทำงานของเซิร์ฟเวอร์ WebSocket โดยปกติแล้ว PHP ทำงานใน Apache, Nginx (ผ่าน FastCGI) หรือบน Microsoft IIS (ผ่าน Fast CGI) สำหรับ Apache และ IIS นี่อาจเป็นปัญหา เนื่องจากไม่ได้สร้างขึ้นโดยคำนึงถึงการเชื่อมต่อแบบถาวร เช่น WebSockets ฉันไม่แน่ใจเกี่ยวกับ Nginx นี่คือเหตุผลว่าทำไมไลบรารี PHP WebSocket ส่วนใหญ่จะถูกสร้างขึ้นเป็นไลบรารีแบบสแตนด์อโลนเพื่อให้ทำงานเป็นกระบวนการของตัวเอง

ดู:

หมายเหตุ: ขณะนี้ IE10 เปิดตัวใน Windows 8

ดูเพิ่มเติมที่: ระบบพุช Ajax

person leggetter    schedule 30.08.2012
comment
ผู้ให้บริการโฮสต์สนับสนุนสิ่งนี้หรือไม่? ตัวเล็กๆ...เช่น godaddy.com,wiredtree.com ฉันแค่เลือกไลบรารี่แล้ววางลงในโฟลเดอร์เว็บของฉันหรือเปล่า...สิ่งที่ฉันอยู่ใน LAMP Stack... - person ; 31.08.2012
comment
คำตอบทั่วไปสำหรับเรื่องนี้ก็คือผู้ให้บริการโฮสติ้งไม่ชอบให้คุณสร้างการเชื่อมต่อแบบถาวร - และแน่นอนว่าไม่ใช่การเชื่อมต่อแบบถาวรเป็น 100 หรือ 1,000 โดยส่วนตัวแล้วฉันไม่คิดว่าการใช้งาน WebSocket แบบโฮสต์เองบนโฮสติ้งที่ใช้ร่วมกันจะเป็นตัวเลือกมาระยะหนึ่งแล้ว แน่นอนว่ามันไม่ได้รวมเข้าด้วยกันอย่างดีเป็นพิเศษกับ LAMP stack IMHO มาตรฐาน สำหรับตอนนี้ ฉันคิดว่าบริการโฮสต์เช่น Pusher (ที่ฉันทำงานด้วย) เป็นทางออกที่ดีที่สุดสำหรับนักพัฒนาบนแพลตฟอร์มที่ใช้ร่วมกัน โฮสติ้ง LAMP stack - person leggetter; 31.08.2012
comment
ฉันตรวจสอบกับฝ่ายสนับสนุนด้านเทคนิคที่ Wired Tree แล้วพวกเขาก็บอกว่าไม่เป็นไร - person ; 02.09.2012
comment
@leggetter คุณช่วยระบุลิงค์เกี่ยวกับความเกลียดชังการเชื่อมต่อแบบถาวรได้ไหม? การใช้แบนด์วิธของฉันลดลงเมื่อฉันเปลี่ยนมาใช้ Ajax 100% มันลดลงในอัตราเดียวกันหลังจากใช้เว็บซ็อกเก็ต 100% ฉันจึงอยากรู้มาก ขอบคุณล่วงหน้า! - person ; 02.11.2013
comment
@Gracchus การเชื่อมต่อแบบถาวรเกลียดเหรอ? หากคุณสามารถกรุณาชี้แจงฉันจะทำสิ่งที่ฉันสามารถช่วยได้ - person leggetter; 04.11.2013
comment
@leggetter แค่พยายามประหยัดพื้นที่ Re: คำตอบทั่วไปสำหรับเรื่องนี้ก็คือผู้ให้บริการโฮสติ้งไม่ชอบให้คุณสร้างการเชื่อมต่อแบบถาวร - และแน่นอนว่าไม่ใช่การเชื่อมต่อแบบถาวร 100 หรือ 1,000 รายการ สิ่งเดียวที่เกิดขึ้นกับฉันคือสันนิษฐานว่า websockets จะใช้แบนด์วิดท์มากกว่า แต่ฉันใช้แบนด์วิดท์น้อยกว่ามากกับ websockets กับ ajax และ postback สงสัยว่าคุณมีรายละเอียดเกี่ยวกับความคิดเห็นนั้นหรือไม่ ขอบคุณล่วงหน้าอีกครั้ง! - person ; 04.11.2013
comment
@Gracchus ปัญหาไม่ใช่แบนด์วิธ แต่เป็นจำนวนการเชื่อมต่อแบบถาวร โดยทั่วไปแล้ว ค่าใช้จ่ายในการบำรุงรักษาการเชื่อมต่อจะกินทรัพยากรมาก หากคุณคำนึงถึงสิ่งนี้เมื่อคุณใช้โฮสติ้งที่ใช้ร่วมกัน การมีแอปพลิเคชันหนึ่งตัวที่มีการเชื่อมต่อถาวรจำนวนมากอาจส่งผลกระทบต่อแอปพลิเคชันอื่นบนโฮสต์ที่ใช้ร่วมกันอย่างชัดเจน ผู้ให้บริการ PaaS เช่น Heroku และ OpenShift เพิ่งเพิ่มการรองรับ WebSocket เมื่อไม่นานมานี้ - Heroku ยังอยู่ในช่วงเบต้า OpenShift เขียนเกี่ยวกับความท้าทายที่พวกเขาเผชิญ openshift.com/blogs/paas-websockets - person leggetter; 04.11.2013
comment
@leggetter คุณช่วยให้ลิงค์เกี่ยวกับการใช้ทรัพยากรของการเชื่อมต่อแบบถาวรได้ไหม? ฉันไม่เห็นมันในลิงก์ที่คุณให้ไว้ แต่ขอบคุณที่แสดงภาษาที่เจ็บปวดเช่น php, ruby ​​ฯลฯ ที่ต้องผ่านเพื่อเริ่มต้นใช้งาน apache! ขอบคุณมากอีกครั้งล่วงหน้า! - person ; 04.11.2013
comment
@Gracchus ไม่มีลิงก์ไปยังบทความที่ตอบคำถามของคุณโดยตรงฉันเกรงว่า คุณสามารถปะติดปะต่อชิ้นส่วนของปริศนาได้โดยการอ่านโมดูล Apache MPM นี่เป็นการเริ่มต้นที่ดี (โปรดดูที่ Prefork โดยเฉพาะ), โมดูลเหตุการณ์ Apache MPM, แหล่งข้อมูลเก่า และ อันที่ใหม่กว่า ขออภัย พวกเขาไม่ได้ตอบคำถามโดยตรง - person leggetter; 04.11.2013
comment
@Gracchus - สิ่งที่ Leggetter พูดนั้นเป็นความรู้ทั่วไป การเปิดซ็อกเก็ตสู่โลกภายนอกมาพร้อมกับปัญหามากมาย โดยเฉพาะอย่างยิ่งเมื่อบริการมักได้รับการออกแบบโดยผู้เขียนโค้ดมือใหม่ คุณมีกระบวนการจัดการปัญหา ปัญหาการจัดการการเชื่อมต่อ ปัญหาด้านความปลอดภัย (แต่ละพอร์ตที่เปิดอยู่นั้นเป็นประตูเข้าสู่ระบบ) ฯลฯ นอกจากนี้ หากบริการไม่เสียหาย ไม่เต็มไปด้วยปัญหาด้านความปลอดภัย และทำงานได้อย่างมีประสิทธิภาพ โดยพื้นฐานแล้วมันจะกลายเป็นบริการที่แข่งขันกันสำหรับผู้ให้บริการ มีโมเดลธุรกิจไม่มากนักที่เปิดรับสิ่งนี้ - person JSON; 17.01.2014
comment
สิ่งนี้เป็นจริงสำหรับ PHP เวอร์ชันใด สิ่งนี้ยังถูกต้องสำหรับอันล่าสุดหรือไม่ - person YakovL; 12.09.2016
comment
บทความ/บทช่วยสอน ซึ่งสาธิตวิธีใช้ PHP websockets ด้วย 'ghedipunk/PHP-WebSockets', Elephant.io, Rachet และประแจ - person Rusty; 11.10.2017
comment
ฉันยังสร้างหินทราย: github.com/eole-io/sandstone และฉันใช้มันเมื่อฉัน ต้องการเซิร์ฟเวอร์ websocket พร้อม api ที่เหลือและเหตุการณ์พุช - person Alcalyn; 30.01.2018

ใช่ เป็นไปได้ที่จะทำ PHP + Websocket อย่างง่ายดาย โดยไม่ต้อง ไลบรารีของบุคคลที่สาม (เช่น Ratchet ที่มักกล่าวถึง)

บทความนี้เป็นตัวอย่างเล็กๆ น้อยๆ ที่ดี (ฉันเสียเวลาหลายชั่วโมงไปกับวิธีแก้ปัญหาที่ซับซ้อน ทั้งหมดนั้นรวมถึงห้องสมุดบางแห่งด้วย จนกระทั่งฉันพบบทความที่มีประโยชน์และเรียบง่ายนี้)

คุณสามารถดูคำแนะนำโดยละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่นี่: วิธีสร้าง websockets เซิร์ฟเวอร์ใน PHP

ใช้เซิร์ฟเวอร์ PHP ที่ทำงานตลอดเวลา โดยคุณเริ่มต้นจากบรรทัดคำสั่งด้วย php websockets.php โดยมี event-loop (คล้ายกับวิธี Node.JS) เป็นไปได้ 100% ที่จะใช้ฟังก์ชัน PHP ดั้งเดิม เช่น socket_create ฯลฯ

person Basj    schedule 30.01.2021
comment
นี่แหละสิ่งที่ฉันต้องการ !. ขอบคุณที่รัก. ฉันสนใจจริงๆ ว่าสิ่งต่างๆ ทำงานอย่างไรในการเขียนโปรแกรมระดับต่ำ - person Imali7 ARF; 18.04.2021