สำหรับเว็บแอปพลิเคชันทั่วไปนักพัฒนาส่วนใหญ่ไม่ใช่คนแปลกหน้า ในเว็บแอปพลิเคชันจะใช้โหมดการร้องขอ/ การตอบสนองแบบโต้ตอบระหว่างเบราว์เซอร์และเซิร์ฟเวอร์ เบราว์เซอร์ออกคำขอและเซิร์ฟเวอร์สร้างการตอบสนองที่สอดคล้องกันตามคำขอ เบราว์เซอร์ถูกประมวลผลเพื่อตอบสนองต่อผู้ใช้ รูปแบบการตอบกลับอาจเป็น HTML, XML หรือ JSON ด้วยรูปแบบสถาปัตยกรรมที่เหลือและความนิยมของ AJAX เซิร์ฟเวอร์ใช้ JSON เป็นรูปแบบข้อมูลการตอบกลับมากขึ้น เว็บแอปพลิเคชันใช้วัตถุ xmlhttprequest เพื่อส่งคำขอและอัปเดตเนื้อหาของหน้าแบบไดนามิกตามข้อมูลที่ส่งคืนโดยเซิร์ฟเวอร์ โดยทั่วไปการดำเนินการของผู้ใช้ในหน้าเช่นการคลิกหรือย้ายเมาส์จะทำให้เกิดเหตุการณ์ที่เกี่ยวข้อง คำขอออกโดยวัตถุ XMLHTTPRequest และหน้ามีการอัปเดตในพื้นที่หลังจากเซิร์ฟเวอร์ตอบกลับ ข้อบกพร่องของวิธีนี้คือข้อมูลที่สร้างโดยเซิร์ฟเวอร์ไม่สามารถแจ้งให้ทราบถึงเบราว์เซอร์ในเวลา แต่จำเป็นต้องได้รับจากเบราว์เซอร์จนกว่าจะมีการส่งคำขอครั้งต่อไป สำหรับบางแอปพลิเคชันที่มีข้อกำหนดข้อมูลสูงเวลาความล่าช้านี้ไม่สามารถยอมรับได้ เพื่อตอบสนองความต้องการของแอปพลิเคชันดังกล่าวมีความจำเป็นสำหรับวิธีการผลักดันข้อมูลจากเซิร์ฟเวอร์ไปยังเบราว์เซอร์เพื่อให้แน่ใจว่าข้อมูลการเปลี่ยนแปลงทางฝั่งเซิร์ฟเวอร์สามารถแจ้งให้ผู้ใช้ทราบได้ในครั้งแรก มีวิธีแก้ปัญหาทั่วไปมากมายซึ่งสามารถแบ่งออกเป็นสองประเภท ความแตกต่างระหว่างสองวิธีนี้คือไม่ว่าจะขึ้นอยู่กับโปรโตคอล HTTP หรือไม่ การฝึกฝนการไม่ใช้โปรโตคอล HTTP คือการใช้ข้อกำหนดใหม่ของ WebSocket ของ HTML 5 และวิธีการใช้โปรโตคอล HTTP รวมถึงการหมุนอย่างง่ายเทคโนโลยีดาวหางและเหตุการณ์การผลักดันเซิร์ฟเวอร์ HTML 5 ที่อธิบายไว้ในบทความนี้ เทคโนโลยีเหล่านี้จะมีการแนะนำด้านล่าง
บทนำสั้น ๆก่อนที่จะแนะนำเหตุการณ์พุชเซิร์ฟเวอร์ HTML 5 ก่อนอื่นจะแนะนำจำนวนเทคโนโลยีการผลักดันข้อมูลด้านข้างของเซิร์ฟเวอร์ที่กล่าวถึงข้างต้น อย่างแรกคือ WebSocket ข้อกำหนด WebSocket เป็นส่วนสำคัญของ HTML 5 ได้รับการสนับสนุนจากเบราว์เซอร์กระแสหลักจำนวนมากและแอปพลิเคชันจำนวนมากที่พัฒนาขึ้นตาม WebSocket เช่นเดียวกับชื่อที่แสดง WebSocket ใช้การเชื่อมต่อแจ็คเก็ตตามโปรโตคอล TCP หลังจากใช้ WebSocket จริง ๆ แล้วมันจะสร้างชุดการเชื่อมต่อคำระหว่างเซิร์ฟเวอร์และเบราว์เซอร์ซึ่งสามารถส่งในข้อมูลสองทาง ฟังก์ชั่นของ WebSocket นั้นทรงพลังมากและมีความยืดหยุ่นในการใช้งานซึ่งเหมาะสำหรับสถานการณ์ที่แตกต่างกัน อย่างไรก็ตามเทคโนโลยี WebSocket นั้นค่อนข้างซับซ้อนรวมถึงการใช้งานเซิร์ฟเวอร์และด้านเบราว์เซอร์ที่แตกต่างจากแอปพลิเคชันเว็บทั่วไป
ยกเว้น WebSocket วิธีการใช้งานอื่น ๆ จะขึ้นอยู่กับโปรโตคอล HTTP เพื่อให้ได้ผลของการผลักดันเวลาจริง วิธีแรกคือการหมุนอย่างง่ายนั่นคือเบราว์เซอร์ส่งคำขอไปยังเซิร์ฟเวอร์เป็นครั้งคราวเพื่อสอบถามว่ามีการอัปเดตข้อมูลหรือไม่ วิธีการนี้ค่อนข้างง่ายและสามารถแก้ปัญหาได้ในระดับหนึ่ง อย่างไรก็ตามพิจารณาช่วงเวลาการหมุนอย่างระมัดระวัง หากช่วงเวลาระหว่างการหมุนนานเกินไปจะทำให้ผู้ใช้ไม่ได้รับข้อมูลที่ได้รับการปรับปรุงในเวลา
เทคโนโลยีดาวหางได้ปรับปรุงข้อบกพร่องของการหมุนอย่างง่ายโดยใช้การสอบถามแบบยาว แต่ละคำขอสำหรับการหมุนนานเซิร์ฟเวอร์จะทำการเชื่อมต่อในช่วงเวลาที่เปิดเป็นระยะเวลาหนึ่งแทนที่จะปิดทันทีหลังจากการตอบกลับเสร็จสิ้น ข้อดีของสิ่งนี้คือภายในระยะเวลาที่เปิดการเชื่อมต่อการอัปเดตข้อมูลที่สร้างโดยเซิร์ฟเวอร์สามารถส่งคืนไปยังเบราว์เซอร์ในเวลา เมื่อปิดการเชื่อมต่อที่ยาวนานเบราว์เซอร์จะเปิดการเชื่อมต่อยาวใหม่ทันทีเพื่อดำเนินการตามคำขอต่อไป อย่างไรก็ตามการใช้งานเทคโนโลยีดาวหางนั้นต้องการการสนับสนุนไลบรารีที่สามในเซิร์ฟเวอร์และด้านเบราว์เซอร์ โดยสรุปการเปรียบเทียบเทคโนโลยีที่แตกต่างกันทั้งสี่ที่กล่าวถึงข้างต้นไม่แนะนำให้ใช้เนื่องจากข้อบกพร่องของพวกเขา เทคโนโลยีดาวหางไม่ได้เป็นส่วนหนึ่งของมาตรฐาน HTML 5 ข้อมูลจำเพาะของ WebSocket และเทคโนโลยีการผลักดันเซิร์ฟเวอร์เป็นส่วนหนึ่งของมาตรฐาน HTML 5 อย่างไรก็ตามข้อกำหนดของ WebSocket นั้นซับซ้อนกว่าและเหมาะสำหรับฉากที่ต้องมีความซับซ้อนและการสื่อสารข้อมูลสองทาง สำหรับสถานการณ์การผลักดันข้อมูลเซิร์ฟเวอร์อย่างง่ายมันก็เพียงพอที่จะใช้เหตุการณ์พุชเซิร์ฟเวอร์
ในแง่ของการสนับสนุนเบราว์เซอร์เหตุการณ์การผลักดันเซิร์ฟเวอร์ได้รับการสนับสนุนในเดสก์ท็อปและเบราว์เซอร์มือถือส่วนใหญ่ยกเว้นเช่น เบราว์เซอร์และเวอร์ชันของเหตุการณ์การสนับสนุนเซิร์ฟเวอร์สนับสนุน ได้แก่ : Firefox 6.0+, Chrome 6.0+, Safari 5.0+, Opera 11.0+, iOS Safari 4.0+, Opera Mobile 11.1+, Chrome สำหรับ Android 25.0+, Firefox สำหรับ Andr Andr Oid 19.0 + และเบราว์เซอร์ BlackBerry 7.0+ และคณะ การสนับสนุนของ IE มีการแนะนำอย่างละเอียดในบทต่อไปนี้
ระบุข้อมูลจำเพาะต่อไปนี้ของข้อมูลจำเพาะเหตุการณ์พุชเซิร์ฟเวอร์
ข้อมูลจำเพาะข้อมูลจำเพาะเหตุการณ์เซิร์ฟเวอร์-เซิร์ฟเวอร์เป็นส่วนสำคัญของข้อกำหนด HTML 5 ข้อกำหนดนี้ค่อนข้างง่ายส่วนใหญ่ประกอบด้วยสองส่วน: ส่วนแรกคือโปรโตคอลการสื่อสารระหว่างเซิร์ฟเวอร์และด้านเบราว์เซอร์และส่วนที่สองคือวัตถุเหตุการณ์ที่ใช้โดยเบราว์เซอร์เพื่อใช้ JavaScript โปรโตคอลการสื่อสารเป็นโปรโตคอลที่ง่ายขึ้นอยู่กับข้อความบริสุทธิ์ เนื้อหาของการตอบสนองบนเซิร์ฟเวอร์คือข้อความ/เหตุการณ์สตรีม เนื้อหาของข้อความตอบกลับถือได้ว่าเป็นเหตุการณ์เหตุการณ์ซึ่งประกอบด้วยเหตุการณ์ที่แตกต่างกัน แต่ละเหตุการณ์ประกอบด้วยสองส่วน: ประเภทและข้อมูลและแต่ละเหตุการณ์สามารถมีตัวระบุเสริม เนื้อหาของเหตุการณ์ต่าง ๆ จะถูกคั่นด้วยเส้นเปล่า (/r/n) ซึ่งรวมถึงรถเข้าและสัญลักษณ์รอยัลเท่านั้น ข้อมูลของแต่ละเหตุการณ์อาจประกอบด้วยหลายบรรทัด รายการรหัส 1 ให้ตัวอย่างของการตอบสนองของเซิร์ฟเวอร์
ตัวอย่างการตอบสนองของเซิร์ฟเวอร์ข้อมูล: First EventData: Second EventId: 100Event: MyEventData: Third EventId: 101: นี่คือความคิดเห็น Data: Fouteh EventData: Fours Event ดำเนินการต่อ
ดังที่แสดงในรายการ 1 แต่ละเหตุการณ์จะถูกคั่นด้วยเส้นเปล่า สำหรับแต่ละบรรทัดลำไส้ใหญ่ (:) เป็นประเภทของบรรทัดก่อนและค่าที่สอดคล้องกันหลังลำไส้ใหญ่ ประเภทที่เป็นไปได้รวมถึง:
ในรหัสข้างต้นเหตุการณ์แรกมีเหตุการณ์แรกเท่านั้นซึ่งจะสร้างเหตุการณ์เริ่มต้น เหตุการณ์คือ Fours Event/Nfounth Eovent ดำเนินการต่อ เมื่อมีข้อมูลหลายบรรทัดข้อมูลจริงจะเชื่อมต่อโดยข้อมูลสำหรับการเปลี่ยนแปลงของบรรทัด
หากข้อมูลที่ส่งคืนโดยเซิร์ฟเวอร์มีตัวระบุเหตุการณ์เบราว์เซอร์จะบันทึกตัวระบุเหตุการณ์ที่ได้รับเมื่อเร็ว ๆ นี้ หากการเชื่อมต่อกับเซิร์ฟเวอร์ถูกขัดจังหวะเมื่อเชื่อมต่อเบราว์เซอร์อีกครั้งโลโก้ของครั้งสุดท้ายที่เหตุการณ์จะได้รับจาก HTTP Head-Event-ID เซิร์ฟเวอร์สามารถกำหนดได้โดยตัวระบุเหตุการณ์ที่ส่งโดยฝั่งเบราว์เซอร์เพื่อพิจารณาว่าเหตุการณ์ใดที่เริ่มเชื่อมต่อต่อไป
สำหรับการตอบกลับที่ส่งคืนโดยฝั่งเซิร์ฟเวอร์ด้านเบราว์เซอร์จำเป็นต้องใช้วัตถุ EventSource ใน JavaScript สำหรับการประมวลผล EventsOrce ใช้วิธีการตรวจสอบเหตุการณ์มาตรฐานซึ่งจำเป็นต้องเพิ่มวิธีการประมวลผลเหตุการณ์ที่เกี่ยวข้องกับวัตถุเท่านั้น EventsOrce จัดเตรียมกิจกรรมมาตรฐานสามเหตุการณ์ดังแสดงในตารางที่ 1
ตารางที่ 1. เหตุการณ์มาตรฐานที่จัดทำโดยวัตถุ Eventsource| ชื่อ | อธิบาย | วิธีการจัดการเหตุการณ์ |
| เปิด | เมื่อมีการสร้างการเชื่อมต่อกับเซิร์ฟเวอร์เรียบร้อยแล้ว | เปิดโล่ง |
| ข้อความ | เมื่อเหตุการณ์ส่งโดยเซิร์ฟเวอร์ | การส่งมอบ |
| ข้อผิดพลาด | เมื่อเกิดข้อผิดพลาด | ผู้กระทำความผิด |
ดังที่ได้กล่าวไว้ก่อนหน้านี้เซิร์ฟเวอร์สามารถส่งคืนเหตุการณ์ประเภทที่กำหนดเองได้ สำหรับเหตุการณ์เหล่านี้คุณสามารถใช้วิธี AddEventListener เพื่อเพิ่มวิธีการประมวลผลเหตุการณ์ที่เกี่ยวข้อง รายการรหัส 2 ให้ตัวอย่างของวัตถุ EventsOrce
ตัวอย่างของวัตถุ Eventsource var es = eventsource ใหม่ ('เหตุการณ์'); es.onmessage = ฟังก์ชั่น (e) {console.log (e.data);}; ข้อมูล);});ดังที่แสดงไว้ข้างต้นหลังจากสร้างวัตถุ EventsOrce โดยเฉพาะวิธีการประมวลผลเหตุการณ์สามารถเพิ่มผ่านวิธีการ onmessage และ addeventListener เมื่อเซิร์ฟเวอร์มีเหตุการณ์ใหม่วิธีการประมวลผลเหตุการณ์ที่เกี่ยวข้องจะถูกเรียก บทบาทของคุณสมบัติ onMessage ของวัตถุ EventsOrce นั้นคล้ายคลึงกับของ AddEventListener ('ข้อความ') แต่แอตทริบิวต์ onMessage รองรับวิธีการประมวลผลเหตุการณ์เดียวเท่านั้น หลังจากแนะนำเนื้อหาข้อกำหนดของเหตุการณ์พุชเซิร์ฟเวอร์การใช้งานเซิร์ฟเวอร์จะถูกนำเสนอด้านล่าง
การใช้งานเซิร์ฟเวอร์และเบราว์เซอร์สิ้นสุดจะเห็นได้จากคำอธิบายของโปรโตคอลการสื่อสารในส่วนก่อนหน้าว่าเหตุการณ์การผลักดันเซิร์ฟเวอร์เป็นโปรโตคอลที่ง่ายกว่า การใช้งานด้านเซิร์ฟเวอร์นั้นค่อนข้างง่าย ความหลากหลายของเทคโนโลยีเซิร์ฟเวอร์ที่แตกต่างกันสามารถพบได้ในชุมชนโอเพ่นซอร์ส มันไม่ยากที่จะพัฒนาตัวเอง บทความนี้ใช้ Java เป็นภาษาการใช้งานของเซิร์ฟเวอร์ การใช้งานโครงการโอเพนซอร์ส-แหล่งบริการ-Servlet ตามลำดับดูทรัพยากรอ้างอิง ต่อไปนี้เป็นตัวอย่างที่เฉพาะเจาะจงเพื่อแสดงวิธีการใช้โครงการ Jetty-Eventsource-Servlet ตัวอย่างใช้เพื่อจำลองการเคลื่อนไหวแบบสุ่มของวัตถุในพื้นที่ จำกัด วัตถุเริ่มต้นจากตำแหน่งสุ่มจากนั้นสุ่มเลือกทิศทางเดียวจากทิศทางด้านบน, ล่าง, ซ้าย, ซ้ายและขวาและเลื่อนระยะทางสุ่มในทิศทางนี้ เซิร์ฟเวอร์กำลังเปลี่ยนตำแหน่งของวัตถุอย่างต่อเนื่องและผลักข้อมูลตำแหน่งไปยังเบราว์เซอร์ซึ่งเบราว์เซอร์แสดง
การใช้งานเซิร์ฟเวอร์:: 一部分是用来产生数据的 org.eclipse.jetty.servlets.eventsource 接口的实现, 另一部分是作为浏览器访问端点的继承自 org.eclipse.jetty.servlets.eventsourceservlet 类的การใช้งาน Servlet รหัสต่อไปนี้ให้คลาสการใช้งานของอินเทอร์เฟซ EventsOrce
EventsOrce Interface Adplementation Class MovementSource
การเคลื่อนไหวของระดับสาธารณะแหล่งที่มาใช้งาน {ความกว้าง int ส่วนตัว = 800; Logger. GetLogger (getClass (). getName ()); .NEXTINT (ความกว้าง); this.y = random.nextint (ความสูง);} @Override โมฆะสาธารณะ onopen (emitter emitter) โยน ioexception {Query (emitter); (LastEventId); // อัปเดตการสืบค้นตำแหน่งเริ่มต้น (emitter); .Split (,); pos [1], 10);} catch (numberFormatexception e) {} ถ้า (isvalidmove (xpos, ypos)) {x = xpos; ข้อมูล.); ในขณะที่ (จริง) {emitter.com (); .data (ID) ตามตำแหน่ง; , e); break;}} emitter.close (); ย้าย = getMove (); ตัดสินว่าตำแหน่งการเคลื่อนไหวในปัจจุบันถูกกฎหมายหรือไม่ xdir = int ใหม่}; int [] ydir = new int [] {0, -1, 0, 1}; )};}}MovementEventSource จำเป็นต้องใช้วิธีการ OnOpen, OnResume และ OnClose ของอินเทอร์เฟซ EventsOrce ทั้งวิธีการ Onopen และ OnResume มีพารามิเตอร์ของอินเทอร์เฟซ EventSource.emitter ซึ่งสามารถใช้ในการส่งข้อมูล วิธีการที่มีอยู่ในอินเทอร์เฟซ eventsource.emitter รวมถึงข้อมูลเหตุการณ์ความคิดเห็น ID และปิดซึ่งสอดคล้องกับเหตุการณ์ต่าง ๆ ในโปรโตคอลการสื่อสารตามลำดับ วิธีการ onresume ยังมีพารามิเตอร์เพิ่มเติม LastEventId ซึ่งระบุตัวระบุของเหตุการณ์ล่าสุดที่ส่งโดยส่วนหัวสุดท้ายของเหตุการณ์ ID
ตรรกะหลักของเหตุการณ์ที่เกิดขึ้นในเหตุการณ์ในคลาส MovementEventSource อยู่ในวิธีการสืบค้น วิธีนี้มีวัฏจักรไม่ จำกัด ที่เปลี่ยนตำแหน่งทุก 2 วินาทีและในเวลาเดียวกันส่งตำแหน่งที่อัปเดตไปยังเบราว์เซอร์ผ่านวิธีการข้อมูลของตำแหน่งการอัปเดตผ่านวิธีการข้อมูลของอินเทอร์เฟซ Eventsource.emitter แต่ละเหตุการณ์มีตัวระบุที่สอดคล้องกันและค่าของตัวระบุคือตำแหน่งของตัวเอง หากเบราว์เซอร์เชื่อมต่อกันอีกครั้งหลังจากตัดการเชื่อมต่อการเชื่อมต่อวัตถุสามารถเคลื่อนย้ายจากตำแหน่งสุดท้าย
เป็นเรื่องง่ายที่จะใช้บริการของบริการที่สอดคล้องกับคลาส MovementEventsource เท่านั้น ในการดำเนินการตามวิธีการใหม่ของแหล่งข่าวจะต้องส่งคืนคลาสการเคลื่อนไหวของแหล่งข้อมูลดังที่แสดงไว้ด้านล่าง เมื่อใดก็ตามที่เบราว์เซอร์ถูกจัดตั้งขึ้นบริการจะสร้างวัตถุของคลาสการเคลื่อนไหวใหม่แหล่งที่มาเพื่อจัดการกับคำขอ
การใช้งาน Servlet ของ Movementservlet การเคลื่อนไหวของคลาสสาธารณะ Extremarcesorceservlet {@Override Eventsource EventsSource (httpservletRequest, String clientId) ส่งคืนการเคลื่อนไหวใหม่ ๆ (800, 600, 20);}}}}}ในการใช้งานเซิร์ฟเวอร์ควรสังเกตว่าควรเพิ่มการสนับสนุนตัวกรองเซิร์ฟเวอร์ที่เกี่ยวข้อง นี่คือข้อกำหนดของกรอบความต่อเนื่องของท่าเทียบเรือที่โครงการ Jetty-Eventsource-Servlet อาศัยอยู่ไม่เช่นนั้นจะมีข้อผิดพลาดในกรณี วิธีการเพิ่มตัวกรองคือการเพิ่มเนื้อหาการกำหนดค่าดังที่แสดงด้านล่างในไฟล์ web.xml
การกำหนดค่าของตัวกรองบริการที่ต้องการโดยความต่อเนื่องของท่าเทียบเรือ<Tilter> <filter-Name> ความต่อเนื่อง </filter-name> <filter-class> org.eclipse.jetty.continuation.continuationFilter </filter-class> </filter> <filter-ma pping> ความต่อเนื่อง </filter-name> <url-pattern>/sse/*</url-pattern> </filter-mapping>การดำเนินการสิ้นสุดเบราว์เซอร์
การใช้งานด้านเบราว์เซอร์นั้นค่อนข้างง่าย รหัสต่อไปนี้ให้การใช้งานที่สอดคล้องกัน ใช้สแควร์บนหน้าเพื่อแสดงวัตถุ เมื่อได้รับเหตุการณ์ใหม่ตำแหน่งของบล็อกจะอยู่ในหน้าตามข้อมูลพิกัดที่ให้ไว้ในข้อมูลเหตุการณ์
รหัสการใช้งานของฝั่งเบราว์เซอร์ var es = eventsource ใหม่ ('sse/movement'); [1];หลังจากแนะนำด้านเซิร์ฟเวอร์พื้นฐานและการสิ้นสุดของเบราว์เซอร์แล้วการสนับสนุน IE ที่สำคัญยิ่งขึ้นจะถูกนำเสนอด้านล่าง
เช่นการสนับสนุนปัญหาใหญ่โดยใช้วัตถุ Eventsource ดั้งเดิมของเบราว์เซอร์คือ IE ไม่ได้ให้การสนับสนุน เพื่อให้การสนับสนุนเดียวกันกับ IE โดยทั่วไปมีสองวิธี วิธีแรกคือการใช้วัตถุ EventsOrce ดั้งเดิมบนเบราว์เซอร์อื่น ๆ ในขณะที่ใช้เทคโนโลยีการหมุนอย่างง่าย ๆ หรือเทคโนโลยีดาวหางบน IE; . บทความนี้ใช้เทคโนโลยี Polyfill เพียงแค่โหลดไลบรารี JavaScript ที่สามในหน้า การใช้รหัสด้านเบราว์เซอร์ไม่จำเป็นต้องเปลี่ยน โดยทั่วไปขอแนะนำให้ใช้วิธีที่สองเนื่องจากด้วยวิธีนี้จำเป็นต้องใช้เทคโนโลยีการใช้งานเพียงหนึ่งเดียวในฝั่งเซิร์ฟเวอร์
ไม่ใช่เรื่องง่ายที่จะจัดหาวัตถุกิจกรรมหลักที่คล้ายกันใน IE ในทางทฤษฎีจำเป็นต้องใช้วัตถุ XMLHTTPRequest เท่านั้นเพื่อให้ได้เนื้อหาการตอบสนองของฝั่งเซิร์ฟเวอร์และผ่านการวิเคราะห์ข้อความเหตุการณ์ที่เกี่ยวข้องสามารถสกัดได้และวิธีการประมวลผลเหตุการณ์ที่สอดคล้องกันสามารถเรียกใช้ ปัญหาคือวัตถุ xmlhttprequest บน IE ไม่สนับสนุนเนื้อหาการตอบกลับของส่วนที่ได้รับ หลังจากการตอบกลับเสร็จสมบูรณ์เท่านั้นที่จะได้รับ เนื่องจากเหตุการณ์พุชเซิร์ฟเวอร์ใช้การเชื่อมต่อที่ยาวนาน เมื่อการเชื่อมต่อเปิดอยู่เสมอเหตุการณ์ที่เกี่ยวข้องจะไม่สามารถเรียกใช้ผ่านวัตถุ XMLHTTPRequest และเหตุการณ์ที่เกี่ยวข้องไม่สามารถเรียกใช้ โดยเฉพาะอย่างยิ่งเมื่อ readingState ของวัตถุ XMLHTTTPREQUEST คือ 3 (ReadyState_interactive) แอตทริบิวต์ ResponseText ไม่สามารถรับได้
ในการแก้ปัญหาของวัตถุ XMLHTTPRequest บน IE คุณต้องใช้วัตถุ XDomainRequest ที่แนะนำใน IE 8 บทบาทของวัตถุ XdomainRequest คือการส่งคำขอข้ามโดเมน AJAX วัตถุ xdomainrequest ให้เหตุการณ์ onprogress เมื่อเหตุการณ์ onprogress เกิดขึ้นเนื้อหาของการตอบสนองบางอย่างสามารถรับได้ผ่านคุณสมบัติ ResponsetExt นี่คือความแตกต่างที่ใหญ่ที่สุดระหว่างวัตถุ XDomainRequest และวัตถุ XMLHTTPREQUEST หลังจากใช้วัตถุ XdomainRequest เพื่อเปิดการเชื่อมต่อไปยังฝั่งเซิร์ฟเวอร์เมื่อข้อมูลใหม่ถูกสร้างขึ้นบนเซิร์ฟเวอร์มันสามารถประมวลผลได้โดยเหตุการณ์ onprogress ของวัตถุ XDomainRequest
อย่างไรก็ตามเนื่องจากวัตถุประสงค์ดั้งเดิมของวัตถุ XdomainRequest คือการออกคำขอข้ามโดเมน AJAX ข้อ จำกัด เหล่านี้จะส่งผลกระทบต่อการใช้งานเป็นวัตถุ EventSource ข้อ จำกัด และโซลูชันเฉพาะแสดงอยู่ด้านล่าง:
เนื่องจากข้อ จำกัด เหล่านี้ในวัตถุ XDomainRequest การใช้งานเซิร์ฟเวอร์จึงจำเป็นต้องทำการเปลี่ยนแปลงที่สอดคล้องกัน การเปลี่ยนแปลงเหล่านี้รวมถึงการส่งคืนหัวการควบคุมการเข้าร่วม-Origin;
ไลบรารี Polyfill ที่ใช้ในบทความนี้เป็นโครงการ EventsOrce ที่พัฒนาโดย Yaffle บน GitHub หลังจากใช้ไลบรารี Polyfill และแก้ไขการใช้งานฝั่งเซิร์ฟเวอร์คุณสามารถใช้เซิร์ฟเวอร์เพื่อผลักดันเหตุการณ์ในเบราว์เซอร์ IE 8 ขึ้นไป หากคุณต้องการสนับสนุน IE 7 คุณสามารถใช้การสอบถามอย่างง่าย ๆ หรือเทคโนโลยีดาวหาง ดูทรัพยากรอ้างอิงในรหัสตัวอย่างของบทความนี้
สรุปหากคุณต้องการผลักดันข้อมูลจากเซิร์ฟเวอร์ไปยังเบราว์เซอร์เทคโนโลยีที่สามารถใช้ตามมาตรฐาน HTML 5 ได้แก่ WebSocket และเซิร์ฟเวอร์เหตุการณ์ผลักดัน นักพัฒนาสามารถเลือกเทคโนโลยีที่เหมาะสมตามความต้องการเฉพาะของแอปพลิเคชัน หากคุณต้องการส่งข้อมูลจากเซิร์ฟเวอร์เพียงมาตรฐานของเหตุการณ์การกดเซิร์ฟเวอร์นั้นง่ายกว่าและง่ายกว่าที่จะบรรลุ บทความนี้ได้นำเสนอเนื้อหามาตรฐานของเหตุการณ์พุชเซิร์ฟเวอร์การใช้งานเซิร์ฟเวอร์และด้านเบราว์เซอร์ในรายละเอียดและวิเคราะห์วิธีการสนับสนุนเบราว์เซอร์ IE