2012-08-15 3 views
7

をTCPサーバとHTTPサーバの間でWebSocketを作成します。 は私がのWebSocket( socket.io )を介して可能性のNode.jsで再びTCPサーバー HTTPサーバからデータを送信する必要があります。私はクライアント接続をリッスン<strong><em>のNode.js</em></strong>を使用して<strong>TCPサーバー</strong>を作成しているのNode.jsで

しかし、TCPサーバーがWebsocketを通じてHTTPサーバーにデータをプッシュできるように、そのような接続を作成する方法はわかりません。

多くのありがとうございます。

+0

socket.ioを使用してHTTPサーバーに接続するためにsocket.io-clientを使用できます。 – nguyenkha

+0

@nguyenkha:コードサンプルをお願いしますか? – Ravish

+0

socket.ioのコードをクライアントサイドのhttp://socket.io/#how-to-useから取得し、JavaScript部分と 'var io = require( 'socket.io-client');' – nguyenkha

答えて

7

私はこの作業をするために多くのことを試していました。ほとんどの場合、私はsocket.ioに頼っていましたが、これはTCPで動作していなかっただけです。

しかし、net.Socketで十分です。

ここにその実例があります。

TCPサーバー

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 Serverの

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> 

この方法では、 reはNode.jsのHTTPサーバとTCPサーバの間でオープンされたソケットです。

+1

だから2つの異なるサーバーですか? – Lapidus

+0

@RavisはWebクライアントからメッセージを送信します。http-serverにAllow-origin-allow-originエラーで終了するメッセージを送信しようとしました。それはWebクライアントからのメッセージを投稿する正しい方法ですか、私は間違いをしていますか?私は質問を提起したhttp://stackoverflow.com/q/32999794/4657065。ご協力いただきありがとうございます。 –

0

あなたは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上に作成されたTCPサーバーと通信できないという問題があります。 'var app = require( 'net')。createServer(handle);'しかし、httpに変更すると動作します。 – Ravish

2

をsocket.ioまたはWS(のみのWebSocket)のいずれかを使用することができますが、おそらくではありません最良の選択。 RPC librariesのいずれかを試してみるか、HTTPまたは独自のプロトコルを使用してください。

+1

ええ、[dnode](https://github.com/substack/dnode)! – rdrey

+0

ねえ、アントレイとrdreyに感謝します。 Node.jsのTCPとHTTPサーバーの間でソケットを動作させていますがしかし、私は間違いなくこの場合RPCライブラリを試してみます。どうもありがとう。 :) – Ravish

関連する問題

 関連する問題