gpt4 book ai didi

python - SockJS Python 客户端

转载 作者:太空狗 更新时间:2023-10-29 19:29:12 27 4
gpt4 key购买 nike

我有一个网站(Java + Spring)依赖 Websockets(Stomp over Websockets 用于 Spring + RabbitMQ + SockJS)来实现某些功能。

我们正在创建一个基于 Python 的命令行界面,我们想添加一些使用 websockets 已经可用的功能。

有谁知道如何使用 python 客户端以便我可以使用 SockJS 协议(protocol)进行连接?

PS_ 我知道一个 simple library我没有测试过,但它没有订阅主题的能力

PS2_ 因为我可以直接连接到 STOMP at RabbitMQ from python并订阅一个主题,但直接公开 RabbitMQ 感觉不对。对第二个选项有什么意见吗?

最佳答案

我使用的解决方案是不使用 SockJS 协议(protocol),而是使用“普通的 web 套接字”,并使用 Python 中的 websockets 包并使用 stomper 包通过它发送 Stomp 消息。 stomper 包仅生成“消息”字符串,您只需使用 ws.send(message)

通过 websockets 发送这些消息

服务器上的 Spring Websockets 配置:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/my-ws-app"); // Note we aren't doing .withSockJS() here
}

}

在代码的 Python 客户端:

import stomper
from websocket import create_connection
ws = create_connection("ws://theservername/my-ws-app")
v = str(random.randint(0, 1000))
sub = stomper.subscribe("/something-to-subscribe-to", v, ack='auto')
ws.send(sub)
while not True:
d = ws.recv()
m = MSG(d)

现在 d 将是一个 Stomp 格式的消息,它有一个非常简单的格式。 MSG 是我为解析它而编写的一个快速而肮脏的类。

class MSG(object):
def __init__(self, msg):
self.msg = msg
sp = self.msg.split("\n")
self.destination = sp[1].split(":")[1]
self.content = sp[2].split(":")[1]
self.subs = sp[3].split(":")[1]
self.id = sp[4].split(":")[1]
self.len = sp[5].split(":")[1]
# sp[6] is just a \n
self.message = ''.join(sp[7:])[0:-1] # take the last part of the message minus the last character which is \00

这不是最完整的解决方案。没有退订,Stomp 订阅的 ID 是随机生成的,不是“记住的”。但是,stomper 库为您提供了创建取消订阅消息的能力。

发送到 /something-to-subscribe-to 的服务器端的任何内容都将被订阅它的所有 Python 客户端接收。

@Controller
public class SomeController {

@Autowired
private SimpMessagingTemplate template;

@Scheduled(fixedDelayString = "1000")
public void blastToClientsHostReport(){
template.convertAndSend("/something-to-subscribe-to", "hello world");
}
}

}

关于python - SockJS Python 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34574349/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com