如何通过node.js / socket.io从客户端连接到tcp服务器?

时间:2011-09-08 03:16:22

标签: javascript node.js tcp websocket socket.io

我使用node.js / socket.io设置了一个tcp服务器,但我无法弄清楚如何通过客户端连接到它。我已经尝试了来自http://socket.io/#how-to-use的客户端代码,但它向tcp服务器发送了一个http请求,在建立连接后,网页没有完成加载,加载圈继续移动。我可以从其他套接字告诉http请求将所有标头发送到tcp服务器,但我不认为连接已建立,因为网页从未完全加载,我无法将任何其他内容传递给tcp服务器。如何将网页的客户端建立到tcp服务器?

我的客户:

<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');
</script>

我的服务器:

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);

毋庸置疑,'hi'消息永远不会到达tcp服务器。

2 个答案:

答案 0 :(得分:1)

我认为这是跨域请求问题。您从localhost:82加载页面,但请求localhost:81。

答案 1 :(得分:0)

派对有点晚了,也是我在stackoverflow上的第一个答案。

我最初开始使用socket.io时遇到了同样的问题。问题出在服务器端代码上,你不需要socket.io模块:

var io = require('socket.io');

io.on('connection',function(socket){
    console.log('socket connected successfully');

    socket.on('data',function(data){
        console.log('data',data);
    });
}

然后,一旦服务器启动并运行,您就从它请求脚本'socket.io/socket.io.js':

<script type="text/javascript" src="http://localhost:81/socket.io/socket.io.js">

我不相信你可以将nodejs的核心'net'模块与socket.io的客户端库混合/匹配。

希望这有帮助。