2011-09-07 198 views
1

我是新來的Node.js/socket.io所以我真的不知道我在做什麼,但我得爲我的服務器端:客戶端tcp與node.js/socket.io?

var app = require('net') 
, fs = require('fs') 


var server = app.createServer(function (socket) { 
    socket.write("Echo server\r\n"); 
    socket.pipe(socket); 
    socket.on('data', function(data) { 
    console.log(data); 
    }); 
}); 

var io = require('socket.io').listen(server) 

server.listen(81); 

所以TCP服務器的工作原理當我使用nc localhost 81併發送數據時。但是,我不知道如何使用腳本標記從服務器端連接併發送數據到網站上的tcp服務器。那麼客戶端會連接到這個tcp服務器並將數據發送給它?

謝謝!

新添加的代碼:

服務器:

var app = require('net') 
    , fs = require('fs') 

var sockets_list = []; 

var server = app.createServer(function (socket) { 
    sockets_list.push(socket); 
    socket.write("Echo server\r\n"); 

    socket.on('data', function(data) { 
    console.log(data); 
    for (var i = 0; i < sockets_list.length; i++) { 
     sockets_list[i].write(data); 
    } 


    }); 

    socket.on('end', function() { 
    var i = sockets_list.indexOf(socket); 
    sockets_list.splice(i, 1); 
    }); 


}); 



server.listen(81); 

客戶:

<script type="text/javascript" src="http://localhost:82/socket.io/socket.io.js"> </script> 
<script> 
var socket = io.connect('http://localhost:81'); 

socket.on('connect', function() { 
    socket.send('hi'); 
}); 

socket.send('hi1'); 
socket.emit('hi2'); 

alert('here'); 



</script> 

發生了什麼事:

我有一個網頁加載這需要一個插座和NC本地主機81佔據另一個插座。所以nc顯示網頁發送的所有內容。連接網頁後,警報('here');被執行並且nc顯示http請求,但是沒有其他東西被髮送到tcp服務器,並且網頁處於持續刷新狀態。爲什麼網頁永遠不會完全加載,'hi'消息永遠不會被髮送,以及http請求到tcp服務器的情況如何?爲什麼我的tcp客戶端不能通過我的tcp服務器失敗?

回答

3

Socket.io的how to use頁向您顯示瞭如何做到這一點。

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost/'); 
    socket.on('connect', function() { 
    socket.send('hi'); 

    socket.on('message', function (msg) { 
     // my msg 
    }); 
    }); 
</script> 
+0

發送一個http請求到tcp服務器,這有什麼關係嗎?同樣在我連接後,刷新循環繼續移動,就像網頁從未完成移動一樣......發生了什麼? – Derek

+4

您無法從網頁建立* raw * TCP連接;沒有允許你打開任意套接字的瀏覽器工具。 Socket.io提供了一個模擬[WebSocket](http://en.wikipedia.org/wiki/WebSocket)的跨瀏覽器抽象層,它允許TCP類似的全雙工消息傳遞。 – josh3736

+0

k thx爲我解釋第一部分,但我仍然困惑爲什麼當我嘗試連接到我的tcp服務器網頁從未完全結束,我不能發送任何東西。上面添加了新的代碼。 – Derek