ฉันกำลังทำโปรเจ็กต์กับ Angular และ Node.js ซึ่งฉันใช้ socket.io (v3.1.0) ปัญหาคือการเชื่อมต่อระหว่างเซิร์ฟเวอร์และไคลเอ็นต์ไม่เคยอัปเกรดจาก การสำรวจ เป็น websockets แม้ว่าฉันจะเห็นบนเว็บคอนโซลว่ามีการส่งคำขออัปเกรดการเชื่อมต่อและ ได้รับการตอบกลับด้วยรหัส 101 พร้อมโปรโตคอลสลับ
นี่คือรหัสกำหนดค่า socket.io บนเซิร์ฟเวอร์:
const app = express();
const server = await app.listen(port);
const test = io.of('/api/test');
test.on('connect', socket => {
console.log("Connected");
});
io.listen(server,
{
cors: {
origin: "*",
methods: ["GET", "POST"],
allowedHeaders: ["content-type"],
credentials: true
}
});
รหัสลูกค้า:
this.socket = io("/api/test")
this.socket.on('connect', () => {
console.log("Connected");
});
ไฟล์กำหนดค่าพร็อกซี:
"/sock/*": {
"target": "http://localhost:3000/socket.io/",
"logLevel": "debug"
}
อีกสิ่งหนึ่งที่ฉันต้องการเพิ่มคือถ้าฉันเปลี่ยนไฟล์พรอกซีเป็น:
"/sock/*": {
"target": "http://localhost:3000/socket.io/",
"logLevel": "debug",
"ws": true
}
ตอนนี้ใน Chrome ใช้งานได้กับ ws เท่านั้น (ตามที่คาดไว้) แต่ใช้ไม่ได้กับ mozilla (มันรีเฟรชหน้าและเกิดข้อผิดพลาด)
ดังนั้นคำถามคือ: มีใครรู้บ้างว่าทำไมมันถึงไม่อัพเกรดเป็น websockets โดยอัตโนมัติ? จากสิ่งที่ฉันเข้าใจ ควรส่งคำขอ http ก่อนสำหรับการจับมือกัน แต่หลังจากนั้นควรอัปเกรดเป็น websockets ตามค่าเริ่มต้น ฉันผิดหรือเปล่า?