1

有一种方法可以在服务器端管理 socket.io 的创建吗?目前,我找不到任何文档,仅发现与来自客户端"io.connect(server)"的请求创建的套接字相关。

当前流程工作正常:

  1. 在 SERVER:PORT 设置 Socket.io(在 Node.js 中)
  2. 客户端连接到服务器
    • 使用 io.connect(SERVER:PORT)

我想知道这是否可能?试图做:

  1. 在 SERVER:PORT 设置 Socket.io(在 Node.js 中)
  2. 收到 POST (REST) - 服务器端
    • 在服务器端创建/打开 Socket.io。
    • 在 Post 的响应中发送 id?
  3. 客户打开一个socke.io

发送到客户端 socket.id 作为客户端

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

到目前为止,您做得对,如果我正确理解您的问题,您正在尝试通过 POST 验证连接,因此如果服务器响应 ID,用户只能通过套接字连接到服务器。这是一个迂回的方式。使用套接字而不是 POST。

Socket服务器必须已经运行,并通过服务器接受连接io.sockets.on('connection'),在服务器上您可以选择是接受还是拒绝它,socket.disconnect('unauthorized')关闭与服务器的连接。

我建议你这样做:

  1. 在 SERVER:PORT 设置 Socket.io(在 Node.js 中)
  2. 客户端使用 io.connect(SERVER:PORT) 连接到 SERVER
  3. 通过套接字发送您在 POST 中发送的内容。
  4. io.sockets.on('connection', function(socket)在服务器上进行身份验证/处理。
  5. 如果未授权,请关闭套接字。
  6. 将 ID 数据发送回客户端。
于 2013-03-07T16:33:40.287 回答
0

这似乎不可能——虽然缺少socket.io 的官方文档,但net 模块的文档表明创建套接字的唯一方法是在服务器端启动它。但是,您仍然可以通过在服务器上为套接字创建一个 id 以与套接字关联来达到预期的效果。那是,

  1. 在 SERVER:PORT 设置 Socket.io(在 Node.js 中)
  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 回答