我有一个使用NodeJS,express和socket.io的基本聊天系统。现在,我想让服务器每5秒将日期插入到聊天流中。由于这不是由用户发起的,因此我在基本请求方面遇到了麻烦。我是NodeJS的新手,也许这只是我不了解的语法。无论如何,使用此当前代码,只有在有人发送聊天消息之后才插入日期。我希望这在服务器端自动发生。如果没有人聊天,则日期仍将每隔5秒传给客户一次。我的问题很可能源于注释部分的标题:“如何在此处放置我的定期计时器...”相反,我试图将其插入在其底部显示“-// ***”的位置。通知...”我是否以不同的方式构造功能?提前致谢。
Server.js
var express = require('express'),
app = express()
, http = require('http')
, server = http.createServer(app)
, io = require('socket.io').listen(server);
// listen for new web clients:
server.listen(8080);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
app.get('/sio/socket.io.js', function (req, res) {
res.sendfile('/root/nodejs/node-v0.10.0/node_modules/socket.io/lib/socket.io.js');
});
//How do I get my periodic timer in here so it can send the date every 5 seconds?
io.sockets.on('connection', function (socket) {
socket.on('sendMessage', function (data) {
socket.broadcast.emit('message', data);
socket.emit('message', { text: '<strong>'+data.text+'</strong>' });
});
});
// Periodic Running
var coolerInterval = function(func, interval, triggerOnceEvery) {
var startTime = new Date().getTime(),
nextTick = startTime,
count = 0;
triggerOnceEvery = triggerOnceEvery || 1;
var internalInterval = function() {
nextTick += interval;
count++;
if(count == triggerOnceEvery) {
func();
count = 0;
}
setTimeout(internalInterval, nextTick - new Date().getTime());
};
internalInterval();
};
coolerInterval(function() {
showdate = new Date().getTime();
console.log( showdate );
//Go ahead and send a notification to everyone.
//***This section sends out the notification that a pick was made
io.sockets.on('connection', function (socket) {
socket.on('sendMessage', function (data) {
socket.broadcast.emit('message', showdate);
});
});
//***End sending out notification.
}, 1000, 5);
//End Periodic
这是浏览器中的html-index.html
<html>
<body>
<script src="/socket.io/socket.io.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
$(document).ready(function () {
var socket = io.connect('http://dev.mysite.com:8080');
socket.on('message', function (data) {
$('#chat').append(data.text + '<br />');
});
$('#send').click(function () {
socket.emit('sendMessage', { text: $('#text').val() });
$('text').val('');
});
});
</script>
<div id="chat" style="width: 500px; height: 300px; border: 1px solid black">
</div>
<input type="text" name="text" id="text">
<input type="button" name="send" id="send" value="send">
</body>
</html>
最佳答案
它比您制作的要简单得多。您可以将Interval()设置为5秒,然后调用io.sockets.emit(),它将把消息发送到所有连接的套接字。
setInterval(function() {
io.sockets.emit('message', (new Date()).getTime());
}, 5000);
在第18行上执行此操作,并删除下面的所有内容。
关于node.js - NodeJS和socket.io聊天自定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15961796/