繁体   English   中英

在HTML页面中通过socket.io获取数据

[英]Get data by socket.io in html page

我已经阅读了很多教程和示例代码,以将数据从node.js类发送到html页面并显示此数据。 例如link1link2link3link4link5等。

我从UDP侦听器获取一些数据,需要在经过一些处理后将其发送到html页面以显示它。 这是我的代码:

udp接收器:

    var server_port = process.env.OPENSHIFT_NODEJS_PORT || 8080
var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1'

var http = require('http'),
    dgram = require('dgram'),
    socketio = require('socket.io'),
    fs = require('fs');

var html = fs.readFileSync(__dirname + '/html/showMap.html');

var app = http.createServer(function(req, res) {
  res.writeHead(200, {
    'Content-type': 'text/html'
  });
  res.end(html);
  io.sockets.emit('welcome', { message: 'Welcome!'});

}).listen( server_port, server_ip_address, function() {
  console.log('Listening');
});

var io = socketio.listen(app),
    socket = dgram.createSocket('udp4');

socket.on('message', function(content, rinfo) {
    console.log('got message', content, 'from', rinfo.address, rinfo.port);
    io.sockets.emit('udp message', 'content' /*content.toString()*/);
});

socket.bind(5001);

和我的html页面,称为“ showMap.html”

<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Get Data</title>
      <script src="/socket.io/socket.io.js"></script>
  </head>
  <body>
    <div id="results">    This text will change     </div>
    <div id="date">sample another temp text</div>
    <script>
    // client code here
    var socket = io.connect('localhost', {port: 8080});
    socket.on('udp message', function(message) {
      console.log(message)
      document.getElementById("date").innerHTML = "My new text!";​
  });
  socket.on('welcome', function(data) {
    document.getElementById("results").innerHTML = data.message;
  });
    </script>
  </body>
</html>

但是通过发送数据包,html页面没有改变。 这是运行代码的控制台日志:

Atis-MacBook-Pro:startWithNode muser $ npm开始

StartWithNodejs@1.0.0开始/ Volumes / Project / Project / NodeJS / startWithNode节点index.js

正在侦听来自127.0.0.1 64047的消息

我的代码有什么问题?

我在本地测试。 在您的HTML文件中,我进行了两项更改,并且都有效。

1-替换io.connect('localhost', {port: 8080}); io.connect('localhost:8080');

2- document.getElementById("date").innerHTML = "My new text!";末尾有一个奇怪的\\ u200b字符。getElementById document.getElementById("date").innerHTML = "My new text!"; 线。 我删除了它,最后得到:

<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Get Data</title>
    <script src="/socket.io/socket.io.js"></script>
  </head>
    <body>
      <div id="results">    This text will change     </div>
      <div id="date">sample another temp text</div>
    <script>
      // client code here
      var socket = io.connect('localhost:8080');
      socket.on('udp message', function(message) {
      console.log(message)
        document.getElementById("date").innerHTML = "My new text!";
      });
      socket.on('welcome', function(data) {
        document.getElementById("results").innerHTML = data.message;
      });
    </script>
  </body>
</html>

其中替换results的内容。

在此示例中,您将能够从php文件获取JSON数据并将其发送到所有连接的客户端。

RunThisFileThroughNodeJs.js

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = process.env.PORT || 3000;
var request = require("request")
var url = "http://localhost/api/index.php";
events = require('events'),
    serverEmitter = new events.EventEmitter();
app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
});


io.on('connection', function(socket){


    setInterval(
        function(){

            request({
                url: url,
                json: true
            }, function (error, response, body) {

                if (!error && response.statusCode === 200) {
                    io.emit('chat message', body);
                }
            });
        },5000);




});


http.listen(port, function(){
    console.log('listening on *:' + port);
});

不要忘记安装express,请求nodejs

现在将这个文件命名为index.html,这样我的文件响应就会在这里。

index.html

<!doctype html>
<html>
<head>
  <title>Prices API</title>
  <script src="http://localhost/js/socket.io.js"></script>

</head>
<body>
<div id="price_list"></div>
<script>
   var socket = io();
socket.on('chat message', function(msg){

    document.getElementById("price_list").innerHTML = JSON.stringify(msg);

    console.log(msg);
});

</script>
</body>
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM