【问题标题】:Using Node, Express, (and Socket.io?) to update a page every 1 second使用 Node、Express(和 Socket.io?)每 1 秒更新一个页面
【发布时间】:2016-10-18 22:36:35
【问题描述】:

我对 Node.js 和 Express 有点陌生,目前我正在处理一个页面,我希望每 1 秒(实际上是 1250 毫秒)生成消息(从服务器)发送到客户端页面。当用户访问该站点时,我希望广播最新消息,之后每秒都有新消息出现。换言之,无论何时连接到服务器,每个用户都会同时在网页上看到相同的消息。

我已经进行了一些搜索,但不幸的是,在网上玩代码示例时运气不佳。这是一个粗略的想法来解释:

app.js

'use strict';

var express = require('express');
var app = express();
var http = require( "http" ).createServer( app );
var io = require( "socket.io" )( http );


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


http.listen(3000, function(){
    /* someFunction to generate new LATESTMESSAGE every 1s */

    io.on('connection', function (socket) {
      socket.emit('news', { messages: LATESTEMESSAGE })
    });
});

我假设我需要从生成 LATESTMESSAGE 的函数中通过 socket.io 发送消息(每 1 秒生成消息时,通过套接字发送?)?如果是这种情况,我不熟悉如何在不是 app.js 的页面中需要 socket.io(这个函数可能是一个类,在它自己的 js 文件中),因为 socket.io 需要 app 和快递(见上面的代码)。

感谢您的帮助!我今天花了很多时间思考这个问题,并希望得到任何指导或帮助。如果我没有提供足够的信息,请告诉我。

附言上面的代码肯定不会完成所需要的。只是一个粗略的大纲来显示我想要完成的事情

【问题讨论】:

    标签: node.js express socket.io


    【解决方案1】:

    你所做的看起来像半双工通信,即只有 服务器 向客户端发送数据,而不是相反。 Socket.io 是全双工通信,即服务器客户端相互发送数据。因此,从技术上讲,最适合您要求的是使用 EventStream 的服务器发送事件 (SSE)。 Socket.io 可能有点过分。

    话虽如此,您想要的是编写一个中间件,将应用程序传递给该中间件。请看https://expressjs.com/en/guide/using-middleware.html

    基本上,您的io 将被传递给中间件函数,因此它们可以访问 Socket。而中间件函数又会被导入到您的app.js 中。

    【讨论】:

      猜你喜欢
      • 2021-02-27
      • 2017-05-24
      • 2014-08-12
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      相关资源
      最近更新 更多