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

ルートのビューを編集して、サーバーにロードされたときに発行するようにします/somethingsomethingルートについても同じことを行います/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(あなたの場合は object is socket)を使用して、特定の接続に送信します

于 2013-08-25T18:42:59.877 に答える