2012-03-03 9 views
5

से node.js में यूडीपी सॉकेट को ट्रांसफर करें क्या किसी एप्लिकेशन से आने वाले सॉकेट को नोडजेएस के माध्यम से http में स्थानांतरित करना संभव है?आवेदन से HTTP

मैं यूडीपी या टीसीपी (यदि यूडीपी में असंभव है) में नोडजेएस में एक आवेदन (सी ++ में) के साथ अपनी सॉकेट भेजता हूं।

NodeJS से मेरे स्क्रिप्ट:

var server = dgram.createSocket("udp4"); 
server.on("message", function (content, rinfo) 
{ 
    console.log("socket: " + content + " from " + rinfo.address + ":" + rinfo.port); }); 
    server.on("listening", function() { 
}); 
server.bind(7788); 

अब कि समारोह करता है करने के लिए है, लेकिन फिर कैसे उदाहरण के लिए Socket.io करने के लिए अपने सॉकेट हस्तांतरण करने के लिए?

मैं सॉकेट को HTTP में स्थानांतरित करने के लिए सॉकेट.io (उदाहरण के लिए) को सॉकेट भेजना चाहता हूं। आपकी मदद के लिए

io.sockets.on('connection', function (socket) { 
    socket.emit(content); 
}); 

धन्यवाद आप: उदाहरण के लिए इस तरह एक समारोह का उपयोग कर, लेकिन बिना नवीनीकृत करके एक socket.io लिए एक कनेक्शन की स्थापना।

++ मेट्रा।

उत्तर

8

यहां सॉकेट.ओ सर्वर के साथ एक पूर्ण उदाहरण है, एक वेब सर्वर एक बहुत ही सरल पृष्ठ भेज रहा है (यह केवल सभी संदेशों को कंसोल पर लॉग करेगा) और संदेशों के लिए एक यूडीपी सॉकेट सुन रहा है, जो उन्हें सभी कनेक्टेड क्लाइंट्स में भेज रहा है:

var http = require('http'), 
    dgram = require('dgram'), 
    socketio = require('socket.io'); 

var app = http.createServer(handleRequest), 
    io = socketio.listen(app), 
    socket = dgram.createSocket('udp4'); 

socket.on('message', function(content, rinfo) { 
    console.log('got message', content, 'from', rinfo.address, rinfo.port); 
    io.sockets.emit('udp message', content.toString()); 
}); 

function handleRequest(req, res) { 
    res.writeHead(200, {'content-type': 'text/html'}); 
    res.end("<!doctype html> \ 
     <html><head> \ 
     <script src='/socket.io/socket.io.js'></script> \ 
     <script> \ 
      var socket = io.connect('localhost', {port: 8000}); \ 
      socket.on('udp message', function(message) { console.log(message) }); \ 
     </script></head></html>"); 
} 

socket.bind(7788); 
app.listen(8000); 

अद्यतन:io.sockets.emit के रूप में दिखाता है, सभी संदेशों को UDP पोर्ट 7788 पर प्राप्त सभी जुड़े हुए ग्राहकों के लिए भेजा जाता है। यदि आप संदेश या इसी तरह के कुछ डेटा के आधार पर उन्हें रूट करना चाहते हैं, तो आप सॉकेट.आईओ की "रूम" सुविधा का उपयोग कर सकते हैं: io.sockets.of(someRoom).emit। सॉकेट.आईओ के लिए कनेक्शन हैंडलर में, आप join प्रत्येक क्लाइंट को कुछ कमरे में कर सकते हैं।

+0

अरे, धन्यवाद, मैं परीक्षण करने जा रहा हूं :)। – Metra

+0

मुझे यकीन है कि socket.io मुख्य रूप से वेबसाकेट के आसपास एक रैपर है। वेबसाकेट टीसीपी आधारित हैं। http://tools.ietf.org/html/rfc6455 अमूर्त खंड पढ़ें। – Kevin