2011-09-07 160 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