Flask socket.IO 服务器上的 Node.js Socket.io 客户端

Posted

技术标签:

【中文标题】Flask socket.IO 服务器上的 Node.js Socket.io 客户端【英文标题】:Node.js Socket.io client on Flask socket.IO server 【发布时间】:2020-04-07 15:04:07 【问题描述】:

我正在尝试将 Node.js Socket.IO 客户端连接到 Python/Flask Socket.IO 服务器。

在服务器 (Raspberry Pi) 上运行此项目:Pi-GPIO-Server。这个项目已经有一个内置的网站,它是一个 socket.io 客户端,用于访问 Raspberry Pi 的引脚。 整个项目运行良好。

现在我想从 Node.JS 客户端访问 socket.io 连接。

在服务器端,我已将服务器的 IP 和端口更新为:

if __name__ == '__main__':
    socketio.run(app, host="192.168.0.8", port=5000)

在客户端,我的实现是(如项目文档中所述)

var io = require('socket.io-client');
var socket = io.connect('http://192.168.0.8:5000', path: '/', transports: ['websocket']);

socket.on( 'connect', (socket) => 
    console.log('Connected: ');
    console.log(socket);
);

socket.on( 'pins:list', (list) => 
    console.log('List of Pins: ');
    console.log(list);
);

任何想法,为什么我无法建立连接? Flask 服务器中的客户端是否有限制?有什么特殊的命令要发送吗? 是否可以调试连接?

【问题讨论】:

【参考方案1】:

@Christoph 请使用下面的代码,您应该能够连接...我有 Flash 服务器正在运行,Nodejs 作为客户端,它对我来说工作正常!!! 在我的情况下,我在同一台机器上同时运行服务器和客户端,所以我使用 localhost 代替 IP 地址

const socket = require('socket.io-client')('http://192.168.0.8:5000', 
            reconnection: true,
            reconnectionDelay: 10000
          );
    
        socket.on('connect', (data) => 
            console.log('Connected to Socket');
        );
        
        socket.on('event_name', (data) => 
            console.log("-----------------received event data from python flask srver");
        );
    
        //either 'io server disconnect' or 'io client disconnect'
        socket.on('disconnect', (reason) => 
            console.log("client disconnected");
            if (reason === 'io server disconnect') 
              // the disconnection was initiated by the server, you need to reconnect manually
              console.log("server disconnected the client, trying to reconnect");
              socket.connect();
            else
                console.log("trying to reconnect agan with server");
            
            // else the socket will automatically try to reconnect
          );
    
        socket.on('error', (error) => 
            console.log(error);
        );

【讨论】:

以上是关于Flask socket.IO 服务器上的 Node.js Socket.io 客户端的主要内容,如果未能解决你的问题,请参考以下文章

Flask Socket.Io:导入后初始化的socketio的持久性

Socket.IO 延迟发送

用 Python flask_socketio 反应 socket.io-client 不处理事件

在 Flask Socket IO 聊天中设置动态聊天室

flask_socket.io _ 运行异步任务的问题

Socket.io 与 flask-socketio python。如何设置套接字保持活动/超时