Socket.io在Express Route上发出 [英] Socket.io emit on Express Route

查看:114
本文介绍了Socket.io在Express Route上发出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当某个API路由被调用时,我想向客户端发送一些数据。
我必须在server.js上执行代码

I want to emit some data to the client when some API route gets called. I have to following code on 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');
  });
});

现在我有这条路线/测试:

Now I have this route /test:

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

Express 4 / socket.io 1.4.5

推荐答案

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

Attach the io instance to your app.

app.io = io;

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

Then you can access it via the request.

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

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

If you are expecting to emit data to a single client you would need keep some kind of session mapping to link a standalone http request to a socket. A session ID might not be a one to one mapping though as you can have many sockets open for one session. You are better off handling a request/response pattern directly with socket.io callbacks.

这篇关于Socket.io在Express Route上发出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆