Javascript 将ZeroMQ从浏览器连接到服务器

Javascript 将ZeroMQ从浏览器连接到服务器,javascript,python,multiprocessing,zeromq,Javascript,Python,Multiprocessing,Zeromq,我正在尝试让ZeroMQ在我的web应用程序中工作。在前端,我使用的是JSZMQ库,它应该可以在浏览器中工作(我知道大多数库都不能)。在Python后端,我使用的是zmq。问题是我尝试的所有协议都会抛出一个错误。如果我尝试TCP,正如预期的那样,浏览器会抛出一个错误,显示“不支持的传输” 根据JSZMQ,当协议为“ws://”时,它应该工作。当我尝试这样做时,服务器在运行它时立即抛出一个“protocolnotsupported”错误。这是我的密码: 客户: import * as zmq fr

我正在尝试让ZeroMQ在我的web应用程序中工作。在前端,我使用的是JSZMQ库,它应该可以在浏览器中工作(我知道大多数库都不能)。在Python后端,我使用的是zmq。问题是我尝试的所有协议都会抛出一个错误。如果我尝试TCP,正如预期的那样,浏览器会抛出一个错误,显示“不支持的传输”

根据JSZMQ,当协议为“ws://”时,它应该工作。当我尝试这样做时,服务器在运行它时立即抛出一个“protocolnotsupported”错误。这是我的密码:

客户:

import * as zmq from 'jszmq'

const socket = new zmq.Pull()
socket.connect('ws://127.0.0.1:3000')
socket.on('message', msg => console.log(msg))
服务器:

import zmq

context = zmq.Context()
sock = context.socket(zmq.PUSH)
sock.bind('ws://127.0.0.1:3000') # This is what throws the error
sock.send('hello')
如果重要的话,我正在为服务器进行多处理,将zmq对象作为全局对象,因为它不可序列化,不能作为参数传递到函数中


为什么这不起作用?

您在这里有点困惑:

ws:// means http:// or default port 80
wss:// means https:// or default port 443

ws://<server>:<port> means http over that port.
ws://表示http://或默认端口80
wss://表示https://或默认端口443
ws://:表示该端口上的http。
在后台,浏览器通过http(s)协议连接到服务器,并在可能的情况下升级到websocket

浏览器不允许Raw套接字连接,但允许Websocket套接字连接

看看:

与ZeroMQ的兼容性 WebSocket传输最近添加到zeromq,并且它仅可用 从源代码编译时

zeromq的其他端口,如NetMQ(C#)和JeroMQ(C#)还没有 支持WebSocket传输

你必须看一看

您正在寻找的模式是:

[SOCKET CLIENT] --> [FASTAPI SERVER] <--> [ZEROMQ]
[SOCKET CLIENT]-->[FASTAPI服务器][ZEROMQ]
本文档介绍如何在单文件客户端websocket和FastAPI服务器中进行设置:

您的工作将在websocket.receive_text和websocket.send_text之间完成

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    while True:
        data = await websocket.receive_text()
        # --> ZeroMQ Code Here <--
        await websocket.send_text(f"Message text was: {data}")
@app.websocket(“/ws”)
异步定义websocket_端点(websocket:websocket):
等待websocket.accept()
尽管如此:
数据=等待websocket.receive_text()

#-->ZeroMQ代码此处您使用的是前端框架吗?是的,我使用的是React并执行componentDidMount函数中的代码。