使用socket.io向连接的用户发送消息

时间:2017-06-22 15:26:50

标签: javascript node.js sockets express socket.io

我无法理解如何使用socket.io向正在执行HTML请求的用户发送邮件。

更多解释:

服务器

我的服务器是expressJS,我使用router.getrouter.post管理我的所有应用。 我也使用cookie-session(https://github.com/expressjs/cookie-session)。

客户端

客户端必须先登录,然后将其重定向到单页应用程序,所有内容都可以通过AJAX处理。

实时通知

我想让客户端针对例子执行AJAX请求,并使用socket.io发送通知。

服务器端代码

  • app.js

// Require all modules first, then:
var server = https.createServer(options, app);
server.listen(443);
io = io().listen(server, {
  wsEngine: 'ws',     // Use "ws" engine (otherwise: seg. fault)
  pingInterval: 3000, // Time in ms to send a ping paquet
  pingTimeout: 3000,  // Time ins ms to set a connection as disconnected
  allowUpgrades: false,
  cookie: false
});
app.use(function (req, res, next) {
  if (!req.io) req.io = io;
  if (!req.sockets) req.sockets = {};
  next();
});

  • 索引路线(index.js

router.get('/home', function (req, res, next) {
  req.io.emit('logged', 'Hello!');

  // Some data processing
  // ...
  //
  
  res.render('home/home', { datas: datas, csrfToken: req.csrfToken() });
});

客户端代码

  • 索引页

<html>

<!-- page content -->

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
<script>
  // Import socket.io functions
  var socket = io.connect({
    reconnection: true,
    reconnectionDelay: 1000,
    reconnectionDelayMax: 5000,
    reconnectionAttempts: Infinity
  });
</script>
<script src="/static/js/socket.io-management.js"></script>

</html>

  • socket.io-management.js

socket.on('connect', function () {
  console.log('socket connected');
});
socket.on('disconnect', function () {
  console.log('socket disconnected');
});
socket.on('error', function () {
  console.log('socket error');
});

socket.on('logged', function (msg) {
  if ((msg !== 'undefined') && (msg !== null)) console.log(msg);
  else console.log('Logged');
});

问题

在服务器上,req.io.emit('logged', 'Hello!');正在运行,但是会将此消息发送给所有用户,而不是请求该页面的用户。

如何将此邮件仅发送给此特定用户?我现在已经尝试了很多东西,但没有成功。

1 个答案:

答案 0 :(得分:0)

您可以使用socketId

发送给特定用户
req.io.sockets.connected[socketid].emit('logged', 'Hello!');