【问题标题】:How database changes send to web client with node js?数据库更改如何使用节点 js 发送到 Web 客户端?
【发布时间】:2019-05-31 12:59:33
【问题描述】:

我正在使用管理仪表板开发 Web 应用程序,我需要在仪表板上显示通知、新用户注册等,我不想使用推送器、firebase 等第三方通知库。我是新手,这通常是如何工作的?

我尝试每隔 x 秒查询一次以通过 http ajax 请求查看服务器上的任何新更改,但我意识到这不是正确的方法,它可能会使服务器处理过载。我正在考虑使用 websocket,然后当服务器从其他客户端收到新的发布请求时,将消息发送到仪表板,但我不确定如何正确使用 websocket(当数据更改如何通过套接字发送时)..

如果 websocket 不是理想的解决方案,通常如何工作?任何关于如何在服务器端与 ws 对象交互的教程或示例将不胜感激(如果 websocket 是理想的解决方案)

【问题讨论】:

  • 你在正确的轨道上,websocket 是解决方案(例如 socket.io)。但我建议你不要在没有从头到尾阅读文档的情况下开始编码。所以你可以了解房间、分组、发射等。
  • 感谢您的快速回答,我可以开始阅读任何教程或博客吗?
  • 我建议您从他们的文档 (socket.io/docs) 开始,您会在他们的网站上找到大量示例和演示。

标签: node.js express websocket dashboard


【解决方案1】:

在做了一些研究之后,我想出了一个解决我问题的方法。我希望它对其他人有所帮助,或者我可以通过从其他人那里获得一些反馈或对我的解决方案提出更好的方法来改进我的解决方案。

只需要两个文件即可完成这项工作

客户端(index.html)

<p>
  open console to see what is happening.
</p>
<script>
  const socketProtocol = (window.location.protocol === 'https:' ? 'wss:' : 'ws:')
  const echoSocketUrl = socketProtocol + '//' + window.location.hostname + ':3000/notifications/'
  const socket = new WebSocket(echoSocketUrl);

  console.log('Waiting for new notifications from server');

  socket.onmessage = e => {
    console.log('Message from server:', event.data)
  }
</script>

服务器端 (server.js)

const WebSocket = require('ws');
const express = require('express')
var expressWs = require('express-ws');
var expressWs = expressWs(express());

var app = expressWs.app;

// express routes
app.get('/', function(req, res) {
  res.sendFile(__dirname + '/index.html');
})

app.get('/customers', function(req, res) {
  res.send('Showing list of customers');

  NotifyDashboard('someone viewed list of customers..');
})

// websocket route
app.ws('/notifications', (ws, req) => {
  ws.on('close', () => {
    console.log('WebSocket was closed')
  })
})

// Let all dashboard clients know.
function NotifyDashboard(data) {
  expressWs.getWss('/notifications').clients.forEach(function each(client) {
    if (client.readyState === WebSocket.OPEN) {
      client.send(data);
    }
  });
};

app.listen(3000, function() {
  console.log(`http/ws server listening on 3000`);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    相关资源
    最近更新 更多