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

时间:2013-03-07 15:42:26

标签: node.js websocket socket.io

有一种方法可以管理服务器端的socket.io创建吗?目前,我找不到任何文档,只根据客户端的请求创建了与套接字相关的文件“io.connect (服务器)“即可。

当前的流量工作正常:

  1. 在SERVER:PORT
  2. 处设置Socket.io(在Node.js处)
  3. 客户端连接到SERVER
    • 使用io.connect(SERVER:PORT)
  4. 我想知道是否有可能?试着做:

    1. 在SERVER:PORT
    2. 处设置Socket.io(在Node.js处)
    3. 收到一个POST(REST) - 服务器端
      • 创建/打开Socket.io服务器端。
      • 回复帖子发送id?
    4. the clien open a socke.io
    5. 的身份发送到客户端socket.id到客户端

3 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分:0)

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

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

我建议你这样做:

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

答案 2 :(得分:0)

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

  1. 在SERVER:PORT
  2. 处设置Socket.io(在Node.js处)
  3. 收到的POST(REST) - 服务器端
  4. 创建ID(注意:这可以在第2步之前完成)
  5. 回复发送id!
  6. 客户端连接到SERVER
    • 使用io.connect(SERVER:PORT)
  7. 客户端使用

    之类的内容将id发送到服务器
    socket.emit("set_id",id)
    
  8. 服务器接收id并使用类似

    之类的东西将其与套接字关联
    socket.on("set_id",function(id){
        socket.set("id",id)
    }
    
  9. 现在您可以使用您创建的ID引用套接字了!
  10. 祝你好运!

相关问题