3

NodejsとSocketioは初めてです。次のようなことをしたいです。

->Webブラウザで指定されたチャネルをリッスンするsocket.io/node.jsサーバーを作成します。->サーバーサイドスクリプトは、メッセージを特定のチャネルにプッシュします。

(私はすでにサーバーを作成していて、ここにコードがあります。これは、接続されているすべてのクライアントに2つのメッセージアクションとメッセージを送信するだけです)

//start code    
var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , url = require('url')

app.listen(8080);

function handler (req, res) {
    // parse URL
    var requestURL = url.parse(req.url, true);

    // if there is a message, send it
    if(requestURL.query.message)
            sendMessage(decodeURI(requestURL.query.action), decodeURI(requestURL.query.message));

    // end the response
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end("");
}

function sendMessage(action, message) {
    io.sockets.emit('notification', {'action': action, 'message' : message});
}

したがって、基本的にSocket.ioサーバーにはチャネルが定義されていません。ただし、これらはクライアント(ブラウザーではjs)によって定義され、メッセージはサーバー側スクリプト(cURLを使用するphpなど)によって特定のチャネルに送信されます。

この質問が以前に行われたことがある場合は申し訳ありませんが、検索を行いましたが、役立つものは見つかりませんでした。

4

1 に答える 1

1

私はあなたの質問について少し混乱しています。チャネルとは、socket.io ルームのことですか? https://github.com/LearnBoost/socket.io/wiki/Rooms
ルームはクライアントのグループであり、次のコマンドを使用してルーム内のすべてのクライアントにメッセージを送信できます。

io.sockets.in('room').emit('event_name', data)

ルームはサーバー側のものであることを認識することが重要です。したがって、クライアントからルームにメッセージを送信する場合は、メッセージ (またはリクエスト) をサーバーに送信し、ルーム名を渡す必要があります。

また、ハンドラー関数が HTTP エンドポイントとして公開されるのは少し珍しいことです。クライアントがすでに socket.io 接続を持っている場合は、それを socket.io メッセージとして送信する方が簡単です。

これで質問に答えられない場合は、クライアント側のコードも投稿できますか? たぶん、あなたが何を達成しようとしているのかを理解するのに役立つでしょう。

于 2013-01-28T09:31:56.580 に答える