带有python flask和nodejs的Websocket(socket.io)代理
我有PythonFlask服务器和NodeJS服务器,我在NodeJS上运行socket.io服务器,我的静态应用程序使用PythonFlask服务器提供服务。是否可以通过Flask应用程序连接到socket.io服务器?我很难将NodeJS中的/socket.io端点代理到Flask,有什么提示吗 我使用Socket.IO作为运行在8888端口的NodeJS服务器, python烧瓶在端口5000上运行是的,您可以 在socket.io服务器上,我有如下功能:带有python flask和nodejs的Websocket(socket.io)代理,python,node.js,sockets,flask,Python,Node.js,Sockets,Flask,我有PythonFlask服务器和NodeJS服务器,我在NodeJS上运行socket.io服务器,我的静态应用程序使用PythonFlask服务器提供服务。是否可以通过Flask应用程序连接到socket.io服务器?我很难将NodeJS中的/socket.io端点代理到Flask,有什么提示吗 我使用Socket.IO作为运行在8888端口的NodeJS服务器, python烧瓶在端口5000上运行是的,您可以 在socket.io服务器上,我有如下功能: io.on('connectio
io.on('connection', (socket) => {
socket.emit('init', { id: socket.id, status: 'connected'});
socket.on('user connected', (data) => {
register_socket_client(redisClient, data);
});
socket.on('disconnect', () => {
unregister_socket_client(redisClient, socket.id);
});
});
server.listen(8080, '0.0.0.0', () => {
console.log('[*] Server listening on port 8080');
});
注意,我将socket_客户端存储在redis实例中。我让您假设如何在redis中实现保存、取消保存某些内容的功能
因此,在通过flask呈现的html文件中,我们有:
// http://localhost:8080 refer to your socket.io server
var socket = io('http://localhost:8080');
var user_connected = "{% if current_user.is_anonymous %}false{% else %}true{% endif %}" === 'true';
socket.on('init', function (data) {
if (user_connected) {
socket.emit('user connected', { user_id: xxx, socket_id: Nxxx});
socket.on('notify', function (data) {
// Do something, modify the DOM to add an alert on your app
console.log(data);
});
}
});
不要注意用户连接的东西。只是我只需要为连接的用户连接socket.io
现在,flask呈现的静态应用程序应该与套接字连接。io
我在socket.io服务器上也有一个私有端点(仅使用jwt令牌),如下所示:
app.post('/notify', passport.authenticate('jwt', { session: false}), (req, res) => {
const query = req.query;
const payload = req.body;
if (query.user_id) {
// here you can retrieve the data from redis based on user_id for example
// We can assume that we have everything in a `data` variable.
io.to(data.socket_id).emit('notify', payload);
}
return res.status(200).json({'ping': 'pong'});
});
而flask服务器可以发出请求,如request.post(“”,data={})