Node.js 在服务器端生成socket.io作为Rest请求

Node.js 在服务器端生成socket.io作为Rest请求,node.js,websocket,socket.io,Node.js,Websocket,Socket.io,有一种方法可以在服务器端管理socket.io的创建吗?目前,我找不到任何文档,只找到与socket相关的文档是根据客户端的请求创建的 当前流工作正常: 在服务器端口设置Socket.io(位于Node.js) 客户端连接到服务器 使用io.connect(服务器:端口) 我想知道这是否可能?尝试做: 在服务器端口设置Socket.io(位于Node.js) 收到一个POST(REST)-服务器端 在服务器端创建/打开Socket.io 在Post响应时是否发送id 克莱恩打开一只袜子

有一种方法可以在服务器端管理socket.io的创建吗?目前,我找不到任何文档,只找到与socket相关的文档是根据客户端的请求创建的

当前流工作正常:

  • 在服务器端口设置Socket.io(位于Node.js)
  • 客户端连接到服务器
    • 使用io.connect(服务器:端口)
  • 我想知道这是否可能?尝试做:

  • 在服务器端口设置Socket.io(位于Node.js)
  • 收到一个POST(REST)-服务器端
    • 在服务器端创建/打开Socket.io
    • 在Post响应时是否发送id
  • 克莱恩打开一只袜子

  • 发送到client socket.id到client as

    到目前为止,您的做法是正确的,如果我正确理解您的问题,您正在尝试通过POST验证连接,因此,如果服务器响应id,用户只能通过套接字连接到服务器。这是一种迂回的方式。用插座代替柱子

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

    我建议您这样做:

  • 在服务器端口设置Socket.io(位于Node.js)
  • 客户端使用io.connect连接到服务器(服务器:端口)
  • 通过套接字发送您在POST中发送的内容
  • 在服务器上的
    io.sockets.on('connection',function(socket)
    上进行身份验证/处理
  • 如果未调整,则关闭插座
  • 将ID数据发送回客户端

  • 这似乎是不可能的——虽然socket.io的官方文档是,但的文档表明创建套接字的唯一方法是在服务器端启动它。 但是,您仍然可以通过在服务器上为套接字创建一个与套接字关联的id来实现所需的效果

  • 在服务器端口设置Socket.io(位于Node.js)
  • 接收邮件(REST)-服务器端
  • 创建id(注意:这可以在步骤2之前完成)
  • 在回复Post时发送id
  • 客户端连接到服务器
    • 使用io.connect(服务器:端口)
  • 客户机使用如下方式将id发送到服务器

    socket.emit("set_id",id)
    
    socket.on("set_id",function(id){
        socket.set("id",id)
    }
    
  • 服务器接收id并使用类似的方式将其与套接字关联

    socket.emit("set_id",id)
    
    socket.on("set_id",function(id){
        socket.set("id",id)
    }
    
  • 现在,您可以使用您创建的id引用套接字

  • 祝你好运!

    到目前为止,深入查看代码和文档,我发现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)
    }
    

    谢谢,但我遗漏了一些东西,在客户端我有一个ID,这个ID将添加到io.connect(服务器)或作为io.socket.emit的一部分?您应该通过socket.emit()将ID作为数据发送(第二个参数)以发送ID。然后服务器/客户端可以从socket.on()读取它并使用它。