Socket.io在Express Route上发出 [英] Socket.io emit on 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屋!