通过 Websockets 在 Nodejs 和 Python 之间进行通信

Posted

技术标签:

【中文标题】通过 Websockets 在 Nodejs 和 Python 之间进行通信【英文标题】:Communicate Between Nodejs and Python via Websockets 【发布时间】:2018-02-04 09:53:01 【问题描述】:

我正在尝试通过 websockets 将数据从 python 发送到 nodejs。

Js:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);

server.listen(3000, () => console.log('running on 3000'));

io.sockets.on('connection', function(socket) 
    io.sockets.on('msg', function(data) 
        console.log(data);
    );
);

Python:

import asyncio
import websockets

async def sendData(uri, data):
    // FAILS ON THE FOLLOWING LINE:
    async with websockets.connect(uri) as websocket:
        await websocket.send(json.dumps(data))

def main():
    text = "sample data"
    asyncio.get_event_loop().run_until_complete(
        sendData("ws://localhost:3000", "msg": text)
    )

main()

我收到“格式错误的 HTTP 消息”错误 (websockets.exceptions.InvalidMessage: Malformed HTTP message) 我担心 python websockets 可能无法与 socket.io 交互。想法?

【问题讨论】:

【参考方案1】:

socket.io 服务器只能与 socket.io 客户端通信。它无法与普通的 webSocket 客户端通信。

Socket.io 在 webSocket 之上添加了它自己的数据格式和连接方案,它的服务器期望数据格式和连接方案存在,以便甚至允许初始连接。

因此,您不能使用 webSocket 客户端连接到 socket.io 服务器。

您的选择是获取 Python 的 socket.io 客户端库,或者将您的服务器更改为纯 webSocket 服务器。

【讨论】:

正是我正在寻找的确认!

以上是关于通过 Websockets 在 Nodejs 和 Python 之间进行通信的主要内容,如果未能解决你的问题,请参考以下文章

使用 Websockets 和 Nodejs 上传文件

Windows 上的 nodejs 和 websockets

本地主机上的 Websockets 通过 https:// 问题

Websockets(ws) , NodeJs 集群,

NodeJS 如何在没有 WebSockets 的情况下处理持久连接?

Node Js 和 websockets