1

サーバー側で socket.io の作成を管理する方法はありますか?, 現在、ドキュメントが見つかりませんでした. クライアントからの要求ごとにソケットが作成されることに関連してのみ見つかりました"io.connect(server)" .

現在の流れはOKです:

  1. SERVER:PORT に (Node.js で) Socket.io を設定します。
  2. クライアントがサーバーに接続
    • io.connect(SERVER:PORT) を使用

可能ですか?やろうとしている:

  1. SERVER:PORT に (Node.js で) Socket.io を設定します。
  2. POST (REST) の受信 - サーバー側
    • サーバー側でSocket.ioを作成/開きます。
    • Post の応答で ID を送信しますか?
  3. クライアントが socke.io を開く

クライアントに送信される socket.id to client

4

3 に答える 3

2

これまでのところ、コードとドキュメントを詳しく調べたところ、socket.io が名前空間をサポートしていることがわかったので、クライアント接続 ID を管理するためにこれを使用しました。

server.js で

  var app = express();
    var server = require('http').createServer(app),
    io = require('socket.io').listen(server,{ log: false });
    // Rest New Process
    function generateNameSpaceWs (responce, request) { 
       io.of("/" + id).on('connection', handler);
      response.send(id);
    }
    app.post("/newWS", function (res, req) {
       return generateNameSpaceWs(res, req);
    }

Client.js で

function makeWS(){
    var ws, c = new XMLHttpRequest();
    c.open("GET", url, false);
    c.send();
    if (c.status == 200){
        id = JSON.parse(c.responseText);
         ws = new io.connect("server/" + id)
}
于 2013-03-08T17:36:34.613 に答える
0

これは不可能のようです。socket.io の公式ドキュメントは不足していますが、 net モジュールのドキュメントには、ソケットを作成する唯一の方法はサーバー側で開始することであることが示されています。ただし、ソケットに関連付けるサーバー上のソケットの ID を作成することで、目的の効果を得ることができます。あれは、

  1. SERVER:PORT に (Node.js で) Socket.io を設定します。
  2. 受信した POST (REST) - サーバー側
  3. ID を作成します (注: これはステップ 2 の前に行うことができます)
  4. Post の応答時に ID を送信してください。
  5. クライアントがサーバーに接続
    • io.connect(SERVER:PORT) を使用
  6. クライアントは、次のようなものを使用してサーバーにIDを送信します

    socket.emit("set_id",id)
    
  7. サーバーはIDを受け取り、次のようなものを使用してソケットに関連付けます

    socket.on("set_id",function(id){
        socket.set("id",id)
    }
    
  8. これで、作成した ID を使用してソケットを参照できます!

幸運を!

于 2013-03-07T18:27:52.513 に答える
0

これまでのところ、あなたの質問を正しく理解していれば、POST経由で接続を認証しようとしているので、サーバーがIDに応答する場合にのみソケット経由でサーバーに接続できます。これは回り道です。POST の代わりにソケットを使用します。

ソケットサーバーはすでに実行されているio.sockets.on('connection')必要があり、サーバー経由で接続を受け入れます。サーバーで、それを受け入れるか拒否するかを選択し、socket.disconnect('unauthorized')サーバーからの接続を閉じることができます。

これを行うことをお勧めします:

  1. SERVER:PORT に (Node.js で) Socket.io を設定します。
  2. クライアントは io.connect(SERVER:PORT) を使用して SERVER に接続します
  3. ソケットを介して POST で送信するものを送信します。
  4. サーバーでの認証/処理io.sockets.on('connection', function(socket)
  5. 未承認の場合はソケットを閉じます。
  6. ID データをクライアントに送り返します。
于 2013-03-07T16:33:40.287 に答える