当前位置: 首页 > 面试题库 >

Socket.io在Express Route上发出

西门旻
2023-03-14
问题内容

我想在调用某些API路由时向客户端发出一些数据。我必须遵循server.js上的代码

var app  = express();
var http = require('http').Server(app);

var io   = require('socket.io')(http);

io.on('connection', function(socket){
  console.log('a user connected');

  socket.emit('tx', 'msg');

  socket.on('disconnect', function(){
    console.log('user disconnected');
  });
});

现在,我有以下路线/测试:

var bsg   = require('./routes/test');

那个文件:

var express      = require('express');
var passport     = require('passport');
var router       = express.Router();

router.get('/test',  function(req, res) {
  //work here
});

module.exports = router;

在客户端:

<script type="text/javascript">
   var socket = io();

   socket.on('tx', function(data) {
     console.log(data);
   });
</script>

最好的解决方案是什么?

谢谢!

Express 4 / socket.io 1.4.5


问题答案:

io实例附加到您的应用程序。

app.io = io;

然后,您可以通过请求访问它。

router.get('/test',  function(req, res) {
  req.app.io.emit('tx', {key:"value"});
});

如果希望将数据发送到单个客户端,则需要保留某种会话映射以将独立的http请求链接到套接字。会话ID可能不是一对一的映射,尽管您可以为一个会话打开许多套接字。您最好直接使用socket.io回调处理请求/响应模式。



 类似资料:
  • 我想做一个在线测验。我用socket.io只是听节点,仅此而已。需要使用ajax检索问题和回答他们从数据库与PHP.我生成随机数在app.js(节点js服务器文件)。' 插座发出(“问题”,随机数); '客户端: 插座关于(“问题”,功能(数据){ $. post("question.php",{"id": data},函数(res){ $('#问题区'). html(res); }); });

  • 问题内容: 如何在Socket.IO上添加cookie值? 我已经阅读了 http://www.danielbaulig.de/socket- ioexpress/ ,但是我不需要在node.js上进行会话管理,而只需在cookie中添加一个socket.io客户端ID值即可,就像connect.sid一样。 问题答案: 看看Socket.io的授权。在这里它可以处理初始连接请求,并且可以在其中设

  • 我正在使用windows,当socket.io发出事件时,命令提示符显示以下内容: 我想不出问题出在哪里,我做错了什么?

  • 问题内容: 我正在做一个API,它在Heroku上。但是我只在heroku方面遇到了socket.io的一些问题,当我在本地对其进行测试时一切正常。该API完全独立于前端,因此它们位于不同的域(和不同的主机)中。问题是在生产中,我无法成功连接插座… 我有一些问题,所有这些都是关于heroku上的socket.io配置的。我知道有些帖子包含有关此信息的信息,但是我发现这些帖子使用的是旧版本的sock

  • 我用Node.js设置了Socket.io,它通过侦听/连接到端口8000(或另一个不是服务器运行端口的端口)在本地开发机器上工作。 当我试图在heroku上做同样的事情时,客户端脚本导入失败了。 我尝试过相对路径 编辑:我实际上是在使用geddy mvc框架,我想让它在heroku上如何设置(基本上就像socket.io一样),我发现这个答案让我看起来可以类似地使用它:GeddyJS&socke

  • 我试图用和构建一个简单的应用程序。 Ive用express Generator生成我的应用程序的skel: 然后我编辑了package.json文件以包含socket.io: 在运行时,so socket.io正在初始化,但似乎没有io.sockets模块。 我运行查看该对象,我得到: 那么sockets方法在哪里呢?无处可去。但是你看,有一个套接字功能: 以防万一,我将发布我的,但我的代码似乎没