2012-08-15 17 views
7

मैं एक TCP सर्वर बनाया है Node.js जो ग्राहकों को कनेक्शन को सुनता है का उपयोग कर के बीच WebSockets बनाएँ। मैं डेटा TCP सर्वरको HTTP सर्वर से एक WebSocket ( socket.io) के माध्यम से संभवतः Node.js में फिर से प्रसारित करने के लिए की जरूरत है।एक TCP सर्वर और Node.js में HTTP सर्वर

हालांकि, मुझे नहीं पता कि इस तरह के कनेक्शन को कैसे बनाया जाए, जैसे कि टीसीपी सर्वर वेबसाइट के माध्यम से HTTP सर्वर पर डेटा धक्का दे सके।

बहुत धन्यवाद।

+0

आप socket.io – nguyenkha

+0

@nguyenkha का उपयोग कर HTTP सर्वर से कनेक्ट करने के लिए socket.io-client का उपयोग कर सकते हैं: क्या आप कृपया मुझे कोड नमूना के साथ मदद कर सकते हैं? – Ravish

+0

socket.io उदाहरण से कोड लें http://socket.io/#how-to-use क्लाइंट-साइड के लिए, केवल जावास्क्रिप्ट भाग और 'var io = आवश्यकता (' socket.io-client '); ' – nguyenkha

उत्तर

7

मैं इस काम को पाने के लिए बहुत सी चीजों की कोशिश कर रहा था। अधिकांश काम मैं इस काम को पाने के लिए socket.io पर निर्भर था, लेकिन यह सिर्फ टीसीपी के साथ काम नहीं कर रहा था।

हालांकि, नेट सॉकेट उद्देश्य को पूरा करता है।

यहां इसका कामकाजी उदाहरण है।

टीसीपी सर्वर

var net = require('net'); 

var HOST = 'localhost'; 
var PORT = 4040; 

var server = net.createServer(); 
server.listen(PORT, HOST); 

server.on('connection', function(sock) { 
    console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort); 
sock.write("TCP sending message : 1"); 
    console.log('Server listening on ' + server.address().address +':'+ 
     server.address().port); 
}).listen(PORT, HOST); 

HTTP सर्वर

var http = require('http').createServer(httpHandler), 
    fs = require("fs"), 
    wsock = require('socket.io').listen(http), 
    tcpsock = require('net'); 

var http_port = 8888; 

var tcp_HOST = 'localhost'; 
var tcp_PORT = 4040; 

/** 
* http server 
*/ 
function httpHandler (req, res) { 
    fs.readFile(__dirname + '/index.html', 
    function (err, data) { 
    if (err) { 
     res.writeHead(500); 
     return res.end('Error loading index.html'); 
    } 

    res.writeHead(200); 
    res.end(data); 
    }); 
} 

http.listen(http_port); 
console.info("HTTP server listening on " + http_port); 

wsock.sockets.on('connection', function (socket) { 

    var tcpClient = new tcpsock.Socket(); 
    tcpClient.setEncoding("ascii"); 
    tcpClient.setKeepAlive(true); 

    tcpClient.connect(tcp_PORT, tcp_HOST, function() { 
     console.info('CONNECTED TO : ' + tcp_HOST + ':' + tcp_PORT); 

     tcpClient.on('data', function(data) { 
      console.log('DATA: ' + data); 
      socket.emit("httpServer", data); 
     }); 

     tcpClient.on('end', function(data) { 
      console.log('END DATA : ' + data); 
     }); 
    }); 

    socket.on('tcp-manager', function(message) { 
     console.log('"tcp" : ' + message); 
     return; 
    }); 

    socket.emit("httpServer", "Initial Data"); 
}); 

ब्राउज़र क्लाइंट

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost'); 
    socket.on('httpServer', function (data) { 
    console.log(data); 
    document.write(data + "\r\n"); 
    socket.emit('tcp', "For TCP"); 
    }); 
</script> 

इस तरह, फिर node.js. में HTTP सर्वर और टीसीपी सर्वर के बीच खोला गया सॉकेट है

+1

तो 2 अलग सर्वर? – Lapidus

+0

@Ravis वेब क्लाइंट से संदेश भेजने के लिए मैंने http सर्वर पर एक संदेश पोस्ट करने का प्रयास किया जो अनुमति-मूल-अनुमति-मूल त्रुटि के साथ समाप्त होता है। क्या यह वेब क्लाइंट से संदेश पोस्ट करने का सही तरीका है या मैं कोई गलती कर रहा हूं? मैंने एक सवाल उठाया है http://stackoverflow.com/q/32999794/4657065।आपकी सहायता के लिए धन्यवाद। –

0

आप उपयोग कर सकते हैं या तो socket.io या ws (केवल WebSocket) पर Node.js ग्राहक (न केवल ब्राउज़र में) के रूप में

var io = require('socket.io-client'); 
var socket = io.connect('http://IP address of Websocket server'); 
socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
}); 
+0

I कोशिश की हालांकि, समस्या यह है कि यह Node.js. पर बनाए गए टीसीपी सर्वर के साथ संवाद करने में सक्षम नहीं है। यानी 'var app = आवश्यकता (' net ')। createServer (हैंडल);' लेकिन यह काम करता है जब मैं इसे http में बदलता हूं। – Ravish

2

आप WebSockets से सर्वर-सर्वर संचार करने की जरूरत है शायद एक नहीं है सर्वोत्तम पसंद। RPC libraries में से किसी एक को आज़माएं, या केवल HTTP या अपने प्रोटोकॉल का उपयोग करें।

+1

हाँ, [डोनोड] (https://github.com/substack/dnode)! – rdrey

+0

अरे, धन्यवाद @ एंड्रे और rdrey। हालांकि मुझे Node.js. में एक टीसीपी और HTTP सर्वर के बीच काम करने वाले सॉकेट मिलते हैं। हालांकि, मैं निश्चित रूप से इस मामले में आरपीसी पुस्तकालयों का प्रयास करूंगा। बहुत बहुत धन्यवाद। :) – Ravish

संबंधित मुद्दे