node.js - 如何基于客户端在 socket.io 中发出事件?

标签 node.js express socket.io

我正在使用 node.js、express 和 socket.io 开发实时数据可视化应用程序。

要求:

必须根据客户端请求发出事件。

例如:如果用户输入 url 作为 http://localhost:8080/pages socket.io 应该发出主题 pages到客户端和另一个用户对 http://localhost:8080/locations 套接字的请求应该向该特定用户发出 location

代码

    var server = app.listen("8080");
    var socket = require('socket.io');
    var io = socket.listen(server);
    var config = {};
    io.on('connection', function (socket) {
          config.socket = io.sockets.socket(socket.id);
          socket.on('disconnect', function () {
             console.log('socket.io is disconnected');
          });
    });



    app.get('/*', function(req, res) {
      var url = req.url;
      var eventName = url.substring('/'.length);
       //pages and locations
      config.socket.volatile.emit(eventName, result);
    });

客户端代码:

          //No problem in client code.Its working correctly. 
            Sample code as follows
          socket.on('pages', function (result) {
               console.log(result);
          }); 

问题:

它向两个客户端发送页面位置

克服这个问题的任何建议。

最佳答案

我无法理解您对此的处理方式,但是因为您说您正在呈现不同的页面,这意味着您可以提供不同的代码,那么这样做怎么样:

服务器端:

var server = app.listen("8080");
var socket = require('socket.io');
var io = socket.listen(server);
var config = {};

app.get('/pages', function(req, res) {
  res.render('pages.html');
});

app.get('/locations', function(req, res) {
  res.render('locations.html');
});

io.on('connection', function (socket) {
   socket.on('pagesEvent', function(data){
     socket.volatile.emit('pages', {your: 'data'});
   });
   socket.on('locationsEvent', function(data){
     socket.volatile.emit('locations', {your: 'data'});
   });
});

在客户端:

pages.html:

socket.on('connect', function(){
  socket.emit('pagesEvent', {});
});
socket.on('pages', function(data){
  // do stuff here
});

locations.html:

socket.on('connect', function(){
  socket.emit('locationsEvent', {});
});
socket.on('locations', function(data){
  // do stuff here
});

关于node.js - 如何基于客户端在 socket.io 中发出事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21827475/

相关文章:

javascript - 使用 Mongoose 连接到 MongoDB

node.js - 永远使用 npm start 和环境变量

json - 打印一个 Sequelize 对象(带有子依赖对象)

javascript - Auth0 与 Socket.IO 强制认证

node.js - 有没有一种方法可以使用elasticsearch为每个匹配字段仅返回一次命中?

javascript - Node.js 使用 AJAX 向后端发送数据

node.js - 重定向到登录时出现 Keycloak CORS 问题

node.js + Express ,单独文件中的路由器和仅在某些路由之前的中间件?

node.js - Flutter socket io没有连接到 Node js socket io服务器

javascript - 无法通过 Flask-socketIO 服务器在 HTML 客户端中显示来自 Python 客户端的视频流