将数据发布到nodejs服务器到客户端

Emit data POSTED to nodejs server to client

本文关键字:nodejs 客户端 服务器 数据      更新时间:2023-09-26

我有以下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中?

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

如果这两种选择都不适合你,那么也许你可以在两者之间设置一些。例如,将post请求中的数据记录到数据库中,并有一个脚本来轮询数据库中的更改,然后通过套接字推送这些更改。这是黑客,绝对不是推荐的方法。

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

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;
});

这是未经测试的,不能保证没有安全缺陷