有没有一种方法可以在express中间件中获取请求的套接字?
即:
import express from 'express';
import io from 'socket.io';
const app = express();
// combine app and io somehow ...
// When client makes a GET request to '/emit/to/self', that client's socket will recieve the 'hello:world' message.
app.get('/emit/to/self', (req, res) => {
req.socket.emit('hello:world', { ... });
res.send('You just triggered your own socket!')
})
字符串
这个想法是express中间件有一个req.socket
属性,它引用来自同一个客户端的连接套接字。这将允许一些更复杂的用例,例如:
app.post('/image/create', (req, res) => {
createExpensiveImage({
onProgress: (progress) => { req.socket.emit('image:progress', { progress }) },
});
})
型
客户端将有一个准确的进度条,显示他们刚刚请求通过API创建的图像。
2条答案
按热度按时间5sxhfpxr1#
这里有一种连接socket.io和express的方法。它使用express-session为给定的客户端创建一个安全会话对象。然后,当socket.io连接发生时,它会获取该客户端的会话并将socket.id存储在会话中。
然后,你可以从一个快速路由处理程序中获取会话的socketID,这样你就可以通过socket.io发送到那个客户端。或者,当你在一个socket.io消息处理程序中时,你可以从那个用户那里获取会话数据。你可以选择任何一种方式。下面是基本代码:
字符串
iqih9akk2#
最后,可以使用socket版本4.6.0
这里基本的例子:
字符串
官方Socket.io文档:https://socket.io/docs/v4/middlewares/#compatibility-with-express-middleware