Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有python flask和nodejs的Websocket(socket.io)代理_Python_Node.js_Sockets_Flask - Fatal编程技术网

带有python flask和nodejs的Websocket(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

我有PythonFlask服务器和NodeJS服务器,我在NodeJS上运行socket.io服务器,我的静态应用程序使用PythonFlask服务器提供服务。是否可以通过Flask应用程序连接到socket.io服务器?我很难将NodeJS中的/socket.io端点代理到Flask,有什么提示吗

我使用Socket.IO作为运行在8888端口的NodeJS服务器, python烧瓶在端口5000上运行

是的,您可以

在socket.io服务器上,我有如下功能:

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={})