0

我正在尝试使用 Node.js 的 HTTP 包为 socket.io 实现条件操作。

基本上我想要的是,根据get请求,socket.io调用不同的函数或发送不同的数据。

这是我的代码:

var http = require('http'),
fs = require('fs');

var app = http.createServer(function (request, response) {
fs.readFile("client.html", 'utf-8', function (error, data) {
    response.writeHead(200, {'Content-Type': 'text/html'});
    response.write(data);
    response.end();
});
}).listen(1337);

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

io.sockets.on('connection', function(socket) {
socket.on('message_to_server', function(data) {

    http.get("/something", function(res) {
        io.sockets.emit("message_to_client",{ message: data["message"] });
        console.log(data["message"]);
    });

    http.get("/else", function(res) {
        console.log("something else");
    });

});
});

我应该怎么做才能实现这样的功能?

4

1 回答 1

1

我认为你做错了。

它可以像

io.sockets.on('connection', function(socket) {
   socket.on("something", function(res) {
        socket.emit("message_to_client",{ message: data["message"] });
        console.log(data["message"]);
   });

   socket.on("else", function(res) {
        console.log("something else");
   });
});

并编辑路由视图,/something以便something在加载到服务器时发出。并对路线做同样的事情/else

在这里,您根据您所在的页面向服务器发出自定义事件,以便服务器可以相应地响应/发送每个路由。您尝试的另一种方式似乎不起作用。对不起,如果我错了。

更新

在您的客户端(视图)中,您可能会喜欢

view1.html

var socket = io.connect('http://localhost:8080');
socket.on('connect', function(){
socket.emit('something');
});

socket.on('message_to_client', function (data) {
alert(data);
});

view2.html

var socket = io.connect('http://localhost:8080');
socket.on('connect', function(){
socket.emit('else');
});

socket.on('message_to_client', function (data) {
alert(data);
});

笔记

另请注意,如果您使用服务器io.socket.emit,它将广播到所有连接。而是使用socket.emit(在您的情况下对象是socket)发送到特定连接

于 2013-08-25T18:42:59.877 回答