คำถามติดแท็ก socket.io

Socket.IO มุ่งหวังที่จะทำให้แอปแบบเรียลไทม์เป็นไปได้ในทุกเบราว์เซอร์และอุปกรณ์มือถือโดยจะเบลอความแตกต่างระหว่างกลไกการขนส่งต่างๆ รองรับการขนส่งหลายรายการเช่น WebSockets, Flash sockets, long polling และอื่น ๆ โดยอัตโนมัติเมื่อการขนส่งล้มเหลว

15
บังคับให้ไคลเอนต์ยกเลิกการเชื่อมต่อจากเซิร์ฟเวอร์ด้วย socket.io และ nodejs
มีวิธีใดในการยกเลิกการเชื่อมต่อไคลเอนต์กับ SocketIO และปิดการเชื่อมต่ออย่างแท้จริงหรือไม่? ดังนั้นหากมีคนเชื่อมต่อกับเซิร์ฟเวอร์ของฉันและฉันต้องการปิดการเชื่อมต่อระหว่างพวกเขากับเซิร์ฟเวอร์ของฉันฉันจะทำอย่างไร
117 socket.io 

5
อะไรคือตัวอย่างของตัวอย่าง Socket.io ที่ง่ายที่สุดที่เป็นไปได้?
เมื่อเร็ว ๆ นี้ฉันพยายามทำความเข้าใจ Socket.io แต่ฉันไม่ใช่โปรแกรมเมอร์ที่ยอดเยี่ยมและเกือบทุกตัวอย่างที่ฉันสามารถหาได้บนเว็บ (เชื่อฉันว่าฉันดูมาหลายชั่วโมงแล้ว) มีสิ่งพิเศษที่ทำให้สิ่งต่าง ๆ ซับซ้อน มีตัวอย่างมากมายที่ทำให้ฉันสับสนหรือเชื่อมต่อกับฐานข้อมูลแปลก ๆ หรือใช้คอฟฟี่สคริปหรือไลบรารี JS จำนวนมากที่ทำให้ยุ่งเหยิง ฉันชอบที่จะเห็นตัวอย่างการทำงานพื้นฐานที่เซิร์ฟเวอร์เพียงแค่ส่งข้อความไปยังไคลเอนต์ทุกๆ 10 วินาทีโดยบอกว่าเป็นเวลากี่โมงและลูกค้าจะเขียนข้อมูลนั้นลงในเพจหรือส่งการแจ้งเตือนซึ่งเป็นสิ่งที่ง่ายมาก จากนั้นฉันสามารถหาสิ่งต่างๆจากที่นั่นเพิ่มสิ่งที่ฉันต้องการเช่นการเชื่อมต่อ db เป็นต้นและใช่ฉันได้ตรวจสอบตัวอย่างในไซต์ socket.io แล้วและมันไม่ได้ผลสำหรับฉันและฉันไม่เข้าใจว่าพวกเขาทำอะไร .
113 node.js  socket.io 


1
การตรวจสอบการเชื่อมต่อซ็อกเก็ต io โดยใช้ JWT
ฉันจะตรวจสอบการเชื่อมต่อ socket.io ได้อย่างไร? แอปพลิเคชันของฉันใช้ปลายทางการเข้าสู่ระบบจากเซิร์ฟเวอร์อื่น (python) เพื่อรับโทเค็นฉันจะใช้โทเค็นนั้นได้อย่างไรเมื่อใดก็ตามที่ผู้ใช้เปิดการเชื่อมต่อซ็อกเก็ตที่ฝั่งโหนด io.on('connection', function(socket) { socket.on('message', function(message) { io.emit('message', message); }); }); และฝั่งไคลเอ็นต์: var token = sessionStorage.token; var socket = io.connect('http://localhost:3000', { query: 'token=' + token }); หากโทเค็นถูกสร้างขึ้นใน python: token = jwt.encode(payload, SECRET_KEY, algorithm='HS256') ฉันจะใช้โทเค็นนี้เพื่อตรวจสอบการเชื่อมต่อซ็อกเก็ตในโหนดได้อย่างไร
111 node.js  socket.io  jwt  token 

5
ห้อง Socket.io แตกต่างระหว่าง broadcast.to และ sockets.in
readme ของ Socket.io มีตัวอย่างต่อไปนี้: var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.join('justin bieber fans'); socket.broadcast.to('justin bieber fans').emit('new fan'); io.sockets.in('rammstein fans').emit('new non-fan'); }); อะไรคือความแตกต่างระหว่างsocket.broadcast.to()และio.sockets.in()?
102 node.js  socket.io 

3
Faye กับ Socket.IO (และ Juggernaut)
ดูเหมือนว่าSocket.IOจะเป็นไลบรารีจำลอง WebSocket ที่ได้รับความนิยมและมีการใช้งานมากที่สุด Juggernautใช้เพื่อสร้างระบบ pub / sub ที่สมบูรณ์ Fayeยังเป็นที่นิยมและใช้งานอยู่และมีไลบรารีจาวาสคริปต์ของตัวเองทำให้ฟังก์ชันการทำงานสมบูรณ์เทียบเท่ากับ Juggernaut Juggernaut ใช้โหนดสำหรับเซิร์ฟเวอร์และ Faye สามารถใช้โหนดหรือแร็คได้ Juggernaut ใช้ Redis เพื่อการคงอยู่ ( การแก้ไข:ใช้ Redis สำหรับ pub / sub) และ Faye จะเก็บสถานะไว้ในหน่วยความจำเท่านั้น ทุกอย่างข้างต้นถูกต้องหรือไม่? Faye กล่าวว่ามันใช้Bayeux - ฉันคิดว่า Juggernaut ไม่ทำเช่นนี้ - นั่นเป็นเพราะ Juggernaut อยู่ในระดับต่ำกว่า (IE ฉันสามารถใช้ Bayeux โดยใช้ Juggernaut) Faye สามารถเปลี่ยนไปใช้ไลบรารีจาวาสคริปต์เบราว์เซอร์ Socket.IO ได้หรือไม่ถ้าต้องการ หรือห้องสมุดจาวาสคริปต์ของพวกเขาทำสิ่งที่แตกต่างกันโดยพื้นฐาน? มีความแตกต่างทางสถาปัตยกรรม …

12
WebSockets และ Apache Proxy: วิธีกำหนดค่า mod_proxy_wstunnel
ฉันมี : Apache(v2.4) บนพอร์ต 80 ของเซิร์ฟเวอร์ของฉันwww.domain1.comกับmod_proxyและmod_proxy_wstunnelเปิดใช้งาน node.js + socket.io บนพอร์ต 3001 ของเซิร์ฟเวอร์เดียวกัน การเข้าถึงwww.domain2.com(มีพอร์ต 80) เปลี่ยนเส้นทางไป 2. ต้องขอบคุณวิธีการอธิบายที่นี่ ฉันได้ตั้งค่านี้ในการกำหนดค่า Apache: <VirtualHost *:80> ServerName www.domain2.com ProxyPass / http://localhost:3001/ ProxyPassReverse / http://localhost:3001/ ProxyPass / ws://localhost:3001/ ProxyPassReverse / ws://localhost:3001/ </VirtualHost> ใช้งานได้กับทุกอย่างยกเว้นส่วน websocket: ws://...ไม่ได้รับการส่งผ่านพร็อกซีอย่างที่ควรจะเป็น เมื่อฉันเข้าถึงเพจwww.domain2.comฉันมี: Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN. คำถาม: จะทำให้ Apache Proxy เป็น WebSockets …

3
io.sockets.emit และ Broadcast ต่างกันอย่างไร
ความแตกต่างระหว่าง io.sockets.emit และ socket.broadcast.emit คืออะไร? เป็นเพียงการออกอากาศที่ส่งไปยังทุกคน แต่ซ็อกเก็ตที่ส่งมัน? ดูเหมือนว่าสามารถใช้แทนกันได้: io.sockets.on('connection', function (socket) { //these should do the same thing io.sockets.emit('this', { receivers: 'everyone'}); socket.broadcast.emit('this', { receivers: 'everyone but socket'}); //emits to everyone but socket socket.emit('this', { receivers: 'socket'}); //emits to socket });

3
จะรวม nodeJS + Socket.IO และ PHP ได้อย่างไร?
เมื่อเร็ว ๆ นี้ฉันได้มองไปรอบ ๆ เพื่อหาวิธีที่ดีในการสื่อสารระหว่าง nodeJS และ PHP นี่คือแนวคิด: nodeJS ยังค่อนข้างใหม่และอาจเป็นเรื่องยากที่จะพัฒนาแอปพลิเคชันเต็มรูปแบบเฉพาะกับมัน ยิ่งไปกว่านั้นคุณอาจต้องการเพียงโมดูลเดียวในโครงการของคุณเช่นการแจ้งเตือนแบบเรียลไทม์แชท ... และคุณต้องการจัดการสิ่งอื่น ๆ ทั้งหมดด้วย PHP เพราะมันอาจจะง่ายกว่าสำหรับคุณ (และคุณสามารถใช้ประโยชน์จาก เฟรมเวิร์กที่มีอยู่เช่น CodeIgniter หรือ Symfony) ฉันต้องการวิธีง่ายๆ ฉันไม่ต้องการใช้ cURL หรือเซิร์ฟเวอร์ที่สามเพื่อสื่อสารระหว่างเซิร์ฟเวอร์ Apache และ Node สิ่งที่ฉันต้องการคือสามารถจับเหตุการณ์จากโหนดใน Javascript แบบง่ายฝั่งไคลเอ็นต์ ฉันไม่พบคำตอบใด ๆ ว่าที่สมบูรณ์เวลาส่วนใหญ่ฝั่งไคลเอ็นต์ทำงานโดยเซิร์ฟเวอร์โหนดดังนั้นจึงไม่สามารถใช้ได้ในกรณีของฉัน ดังนั้นฉันจึงรวบรวมข้อมูลทุกหัวข้อที่เป็นไปได้และในที่สุดก็พบคำตอบของฉัน ฉันจะพยายามแบ่งปันสิ่งนี้และเพื่อให้มีจุดที่ชัดเจนทั้งหมด หวังว่านี่จะช่วยคนได้บ้าง! ;)

6
วิธีส่งข้อความไปยังไคลเอนต์เฉพาะด้วย socket.io
ฉันเริ่มต้นด้วย socket.io + node.js ฉันรู้วิธีส่งข้อความในเครื่องและsocket.broadcast.emit()ฟังก์ชั่นการออกอากาศ: - ไคลเอนต์ที่เชื่อมต่อทั้งหมดได้รับข้อความเดียวกัน ตอนนี้ฉันต้องการทราบวิธีการส่งข้อความส่วนตัวไปยังลูกค้ารายใดรายหนึ่งฉันหมายถึงซ็อกเก็ตหนึ่งช่องสำหรับการแชทส่วนตัวระหว่าง 2 คน (สตรีมไคลเอนต์ถึงไคลเอนต์) ขอบคุณ.

8
ใช้ socket.io ใน Express 4 และ express-generator's / bin / www
นี่คือข้อตกลง: ฉันกำลังพยายามใช้ socket.io ในโครงการด่วน หลังจากที่ Express Js 4 ถูก lauched ฉันได้อัปเดตโปรแกรมสร้างด่วนของฉันและตอนนี้ฟังก์ชั่นเริ่มต้นของแอพจะเข้าสู่./bin/wwwไฟล์รวมถึง vars เหล่านั้น (เนื้อหาไฟล์ www: http://jsfiddle.net/avMa5/ ) var server = app.listen(app.get('port'), function() {..} (ตรวจสอบโดยnpm install -g express-generatorแล้วexpress myApp ตามที่กล่าวมาเราจำไว้ว่าเอกสาร socket.io ขอให้เรายิงมันอย่างไร: var app = require('express').createServer(); var io = require('socket.io')(app); โอเค แต่ฉันไม่สามารถทำได้ภายใน app.js เช่นที่แนะนำ ควรทำใน. / bin/www เพื่อให้ทำงานได้ ใน ./bin/www นี่คือสิ่งที่ฉันทำได้เพื่อให้มันใช้งานได้: …

6
จะแชร์เซสชันกับ Socket.IO 1.x และ Express 4.x ได้อย่างไร?
ฉันจะแชร์เซสชันกับ Socket.io 1.0 และ Express 4.x ได้อย่างไร ฉันใช้ Redis Store แต่ฉันเชื่อว่ามันไม่สำคัญ ฉันรู้ว่าฉันต้องใช้มิดเดิลแวร์เพื่อดูคุกกี้และเรียกเซสชัน แต่ไม่รู้ว่าจะทำอย่างไร ฉันค้นหา แต่ไม่พบการทำงานใด ๆ var RedisStore = connectRedis(expressSession); var session = expressSession({ store: new RedisStore({ client: redisClient }), secret: mysecret, saveUninitialized: true, resave: true }); app.use(session); io.use(function(socket, next) { var handshake = socket.handshake; if (handshake.headers.cookie) { var str …

4
Socket.IO จัดการเหตุการณ์ตัดการเชื่อมต่อ
ไม่สามารถจัดการกับเหตุการณ์ตัดการเชื่อมต่อนี้ไม่รู้ว่าทำไมซ็อกเก็ตไม่ส่งไปยังไคลเอนต์ / ไคลเอนต์ไม่ตอบสนอง! เซิร์ฟเวอร์ io.sockets.on('connection', function (socket) { socket.on('NewPlayer', function(data1) { online = online + 1; console.log('Online players : ' + online); console.log('New player connected : ' + data1); Players[data1] = data1; console.log(Players); }); socket.on('DelPlayer', function(data) { delete Players[data]; console.log(Players); console.log('Adios' + data); }); socket.on('disconnect', function () { socket.emit('disconnected'); online …

6
การส่งข้อความไปยัง ID เฉพาะใน Socket.IO 1.0
ฉันต้องการส่งข้อมูลไปยังรหัสซ็อกเก็ตเฉพาะหนึ่งรหัส เราเคยทำได้ในเวอร์ชันเก่า: io.sockets.socket(socketid).emit('message', 'for your eyes only'); ฉันจะทำสิ่งที่คล้ายกันใน Socket.IO 1.0 ได้อย่างไร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.