【问题标题】:Emit data POSTED to nodejs server to client将发布到 nodejs 服务器的数据发送到客户端
【发布时间】:2016-05-10 18:15:54
【问题描述】:

我有以下 nodejs 服务器代码

    http = require('http');
    fs = require('fs');
    url = require('url');
    server = http.createServer( function(req, res) {

        console.dir(req.param);

        if (req.method == 'POST') {
            console.log("POST");
// I WANT TO EMIT THIS DATA TO CLIENT
        }
        else
        {
            console.log("GET");
        }

    });

//THIS IS A WORKING EXAMPLE WHICH I FOUND ONLINE TIED TOGETHER

    io = require('/usr/local/lib/node_modules/socket.io').listen(server);

    io.sockets.on( 'connection', function ( socket ) {
      console.log("runing time");
      sendTimeMessage(socket);
    });


    function sendTimeMessage(socket){
      console.log("in time");
      var now= new Date().getTime();
      socket.emit('notification', {'message': now});
      setTimeout(function() {
        socket.emit('notification', {'message': "after 5s"});
      },5000);
    }

    port = 8000;
    host = '127.0.0.1';
    server.listen(port, host);
    console.log('Listening at http://' + host + ':' + port);

客户端

<!doctype html>
<html>
    <head>
        <script src="http://127.0.0.1:8000/socket.io/socket.io.js"></script>
        <script>

        var socket = io.connect('http://localhost:8000');

        socket.on('notification', function (data) {
            console.log(data);
        });
        </script>
    </head>
    <body>
        <ul id='messages'></ul>
    </body>
</html>

请原谅这个例子。我想要实现的是,当我的 nodejs 服务器发生帖子时,我想将它发送到前端。我是 nodejs 和 socket 的新手,但我知道 javascript 是如何工作的。

有没有办法可以将 socketio 发射到 POST 中?

【问题讨论】:

    标签: javascript html node.js sockets socket.io


    【解决方案1】:

    如果您要向使用套接字的服务器发送数据,请通过套接字发送数据,而不是通过发布请求发送数据。或者,如果必须使用 post,可以通过 res.send('data goes here'); 将其发送回客户端;

    如果这些选项都不适合您,那么也许您可以设置一些中间选项。例如,将 post 请求中的数据记录到数据库中,并有一个脚本轮询数据库中的更改,然后通过套接字推送它们。这是 hacky,绝对不推荐这样做。

    编辑:另一种方法可能是创建一个全局变量 (yuck),这是一个以某种 ID 作为键的套接字列表。然后将该 ID 与您的发布请求一起发送,并从您的全局变量中获取套接字并从那里发送数据。例如:

    var sockets = {};
    var server = http.createServer( function(req, res) {
        if (req.method == 'POST') {
            // You will need to pass the socket ID from the client
            sockets[request.data.id].emit('Some data');
        }
    });
    
    var io = require('/usr/local/lib/node_modules/socket.io').listen(server);
    
    io.sockets.on( 'connection', function ( socket ) {
      sockets[socket.id] = socket;
    });
    

    这是未经测试的,不保证没有安全漏洞

    【讨论】:

      猜你喜欢
      • 2020-08-17
      • 2022-01-12
      • 2019-05-09
      • 2015-03-05
      • 1970-01-01
      • 2013-08-13
      • 2013-04-11
      • 2021-12-07
      • 2019-03-05
      相关资源
      最近更新 更多