【问题标题】:Handle incoming HTTP request with Socket.io in Node js app在 Node js 应用程序中使用 Socket.io 处理传入的 HTTP 请求
【发布时间】:2016-04-23 03:09:01
【问题描述】:

我有一个节点应用程序应该通过 HTTP GET 请求/api/users?data=68 接收来自另一个应用程序的请求并实时显示数据。我有处理传入 HTTP 请求的 api/users 路由。首先,我有适用于 socket.io 的节点应用程序但现在我想处理 Http 请求。这是我的代码

    var express = require('express');
    var app = express();
    var server   = require('http').Server(app);
    var io = require('socket.io')(server);
    var port = process.env.PORT || 8080
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    var router = express.Router();

    router.get('/api/users', function(req, res) {
    var query = req.param('data');
    io.emit("chat message","some msg");
    });

    io.on('connection', function(socket){
     console.log('client connected');
     socket.on('pass data from HTTP request to the view', function(data){
     console.log(data);
     });

   });

     app.use(router);

     server.listen(port)

Client.js

 var socket = io();
  socket.on('chat message', function (message) {
    //socket.emit('chat message', { my: 'world' });
    console.log('received ');
    });

如何将数据从 /api/users/ 路由传递到套接字连接?提前谢谢你。

【问题讨论】:

    标签: node.js express socket.io


    【解决方案1】:

    如果你想将数据发送到所有 socket.io 连接的客户端,你可以这样做:

    io.emit("someMsg", someData);
    

    如果您只想发送到特定的 socket.io 连接,那么您需要能够获取该特定的套接字,您可以通过 socket.id 或其他方式来跟踪哪个套接字是哪个.

    【讨论】:

    • 那么你的意思是把io.emit("someMsg", someData);放在/api/users路由里面?因为问题是我如何在/api/users 路由中获取数据到套接字连接,以便实时显示。
    • @sparks - 抱歉,我不明白您要向谁发送数据,也不知道您何时要发送数据。请记住,您的服务器可以同时通过 socket.io 连接许多客户端。此外,如果您只想将数据返回给发出 /api/users 请求的客户端,那么从 API 请求中返回该数据会简单得多。这就是 HTTP 请求的用途。
    • 所以基本上触发/api/users的客户端是另一个外部应用程序。它只是提供数据,我想将数据显示给浏览器,让大家实时查看套接字连接。
    • @sparks - 正如我的回答所说,如果您尝试将数据发送到所有连接的客户端,那么只要您的服务器有数据想要发送到它可以执行的所有客户端io.emit("someMsg", someData);并且该消息和数据将发送到所有连接的客户端。如果服务器获取数据的位置在/api/users 请求处理程序中,那么您将在其中放置io.emit(...) 调用。如果服务器以其他方式(例如从其他外部来源)获取数据,那么您将在此处进行io.emit(...) 调用。
    • 哦,好的,我一直在尝试这样做,尽管它根本不起作用。也许我的客户端代码有问题。我将添加客户端代码,请参见上文。
    猜你喜欢
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    相关资源
    最近更新 更多