web端实时获取服务器数据的三种方法

web端实时获取服务器数据的三种方法

在web端,想要实时获取服务端的消息,一般有3种方法

1、接口轮询:通过客户端循环发送接口获取数据

function send(){
    $.ajax({ 
        url: "/test",  
        success: function(res){
            //处理res
        }
    })
}

setInterval(function(){
    send()
}, 2000)

分析:每两秒钟发一次接口,获取数据进行更新,可能数据并没有改变,也进行了返回,这样会造成了浪费

2、websocket: 通过长链接,进行客户端和服务端双向通信,这种比较适合即时聊天通信

客户端

// 创建webSocket
const socket = new WebSocket('ws://localhost:8080');

// 链接成功
socket.addEventListener('open', function (event) {
    socket.send('Hello Server!');
});

// 接受消息
socket.addEventListener('message', function (event) {
    console.log('Message from server ', event.data);
});

//发送消息
socket.send("你好")

服务端:node

//先npm install ws
var WebSocketServer = require('ws').Server,
wss = new WebSocketServer({ port: 8080 });//服务端口8080
wss.on('connection', function (ws) {
    console.log('服务端:客户端已连接');
    ws.on('message', function (message) {
        //打印客户端监听的消息
        console.log(message);
         ws.send('我也很好');
    });
});

3、eventSource: 只用在服务端推送消息到客户端(IE不支持)

客户端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>eventSource</title>
</head>
<body>
    <div id="app"></div>
    <script>
        var eventSource = new EventSource('/event')
        var eventList = document.querySelector('#app')
        eventSource.onopen = function () {
            console.log('链接成功')
        }
        eventSource.onmessage = function(e) {
            // 获取服务端推送的不设置event的值的内容
            var newElement = document.createElement('p')
            newElement.textContent = e.data
            eventList.appendChild(newElement)
        }
        eventSource.onerror = function(error) {
            console.log(error,"error")
        }
        eventSource.addEventListener("myEve", function (event) {
            // 获取服务端推送的event = myEve的内容
        })
    </script>
</body>
</html>

服务端:

//先npm install express
const { response } = require('express');
const express = require('express')
const app = express()
const port = 8099

app.use(express.static(__dirname + '/'));

app.get('/event', (req, res) => {
    try {
        res.writeHead(200, { "Cache-Control": "no-cache", 'Content-Type': 'text/event-stream' });
        setInterval(() => {
            const data = {
                now: +new Date()
            }
            res.write(  // 命名事件
                'event:' + '\n' +
                'data:' + JSON.stringify(data) + '\n' +
                'retry:' + '2000' + '\n' +
                'id:' + '12345' + '\n\n'
              )
        }, 2000)
    } catch (error) {
        console.log(error)
    }
    
})

app.listen(port, () => {
    console.log('监听'+ port + '端口中。。。')
})

分析: 要注意event的事件值

总结: 接口轮询:比较简单,比较浪费资源,兼容性最好

            websocket:双向通信,比较适合聊天这样的双方交互

            eventSource:用于消息推送,占用的资源比较少,单方推送,比较适合股票等实时数据更新,IE不支持(可以用其他方式做兼容)

  • 3
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 App Inventor 创建一个 Web 客户获取服务器数据,你可以使用 Web 模块和相应的组件。下面是一个简单的示例: 1. 在 App Inventor 创建一个新项目,并打开设计视图。 2. 在组件面板,找到并添加一个 Web 组件。 3. 在屏幕上添加一个按钮组件,并为其命名为 "Get Data"。 4. 在 Blocks 编辑器,找到 "Button1" 的点击事件,将其拖动到工作区。 5. 在工作区,使用 Web 组件的方法和事件块来获取服务器数据。 - 使用 `Web1.GotText` 事件块来处理获取到的服务器数据。 - 在 `Button1.Click` 事件块,使用 `Web1.Get` 方法发送 GET 请求到服务器获取数据。 下面是一个示例代码: ```blocks // 当按钮点击时触发 Button1.Click // 设置 Web 组件的请求 URL Web1.Url = "http://your_server_url/data" // 发送 GET 请求并获取服务器数据 Web1.Get() // 当获取服务器数据时触发 Web1.GotText // 将获取到的数据显示在标签组件上 Label1.Text = Web1.ResponseContent ``` 在这个示例,我们设置了 Web 组件的 URL 为服务器的地址,并在按钮点击事件发送 GET 请求。当获取服务器数据后,`GotText` 事件将被触发,我们将服务器数据显示在一个标签组件上。 请确保将 "your_server_url" 替换为你实际的服务器地址。另外,还可以根据服务器的 API 接口定义来添加其他必要的参数和头部信息。 这只是一个简单的示例,你可以根据你的需求扩展和定制这个代码。App Inventor 的 Web 组件提供了更多的方法和事件,如 POST 数据、处理错误等,你可以查阅相应的文档以了解更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值