我对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 })
});
});
我假设我需要通过socket.io从生成LATESTMESSAGE的函数发送消息(生成消息时每1秒,通过套接字发送?)?如果是这种情况,我不熟悉我在一个不是app.js的页面中需要socket.io(这个函数可能是一个类,在它自己的js文件中),因为socket.io需要app和表达(见上面的代码)。
我很感激帮助!我今天花了很多时间思考这个问题,并希望得到任何指导或帮助。如果我没有提供足够的信息,请告诉我。
P.S。上面的代码肯定不会完成所需的。只是一个粗略的轮廓来展示我想要完成的事情
答案 0 :(得分:0)
您正在做的事情看起来像是半双工通信,即只有服务器将数据发送到客户端,而不是相反。 Socket.io是全双工通信,即服务器和客户端相互发送数据。因此,从技术上讲,最适合您需求的是使用EventStream的服务器发送事件(SSE)。 Socket.io可能略显过分。
话虽如此,你想要的是写一个中间件,你传递应用程序。请查看https://expressjs.com/en/guide/using-middleware.html
基本上,您的io
将被传递到中间件函数,因此他们可以访问Socket。然后,中间件功能将被导入到您的app.js
中。