micro_cloud_fly 2023-10-26 17:07 采纳率: 0%
浏览 4
已结题

websocket sse

我有一段python代码,使用的是drf框架,代码如下:


from rest_framework.views import APIView
from django.http import StreamingHttpResponse


class StreamView(APIView):
    def get(self, request, *args, **kwargs):
        question = request.query_params['question']
        # todo 此时把question发送到一个第三方到websocket服务,我不断监听这个websocket服务返回到消息,同时以SSE的方式返回给接口调用者

请问todo下面的代码该如何写呢,我的环境是

  • pyhton 3.9
  • django 3.2

希望回答者可以自己在本地起一个websocket服务,自行测试成功后,再给出答案

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-10-26 17:09
    关注

    引自强大而免费的微信小程序:皆我百晓生

    要实现将question发送到第三方的websocket服务,并以SSE的方式将返回的消息返回给接口调用者,你可以使用websocket库来处理websocket连接,以及sseclient库来处理SSE连接。

    首先,安装所需的依赖库:

    pip install websocket
    pip install sseclient
    

    接下来,你可以使用以下代码来实现:

    import websocket
    import sseclient
    from rest_framework.views import APIView
    from django.http import StreamingHttpResponse
     
     
    class StreamView(APIView):
        def get(self, request, *args, **kwargs):
            question = request.query_params['question']
            # todo 此时把question发送到一个第三方到websocket服务
            ws_url = 'ws://your_websocket_service_url'
            websocket.enableTrace(True)  # 如果需要调试信息,请启用此行
    
            # WebSocket连接回调函数
            def on_ws_message(ws, message):
                # 处理websocket接收到的消息
                # 可根据自己的需求来处理返回的消息,这里只是简单的将消息返回给调用者
                response = f"data: {message}\n\n"
                yield response
    
            ws = websocket.WebSocketApp(ws_url, on_message=on_ws_message)
    
            # 启动WebSocket连接
            ws.run_forever()
    
            # 以SSE的方式返回给接口调用者
            def event_stream():
                # SSE连接到第三方服务,可以监听到websocket返回的消息
                sse_url = 'http://your_sse_service_url'
                client = sseclient.SSEClient(sse_url)
                for event in client.events():
                    # 处理SSE接收到的消息
                    # 可根据自己的需求来处理返回的消息,这里只是简单的将消息返回给调用者
                    response = f"data: {event.data}\n\n"
                    yield response
    
            return StreamingHttpResponse(event_stream(), content_type='text/event-stream')
    

    上述代码中,你需要将your_websocket_service_url替换为你的第三方websocket服务的URL,并将your_sse_service_url替换为你的SSE服务的URL。

    这样就可以将question发送到第三方的websocket服务,并以SSE的方式将返回的消息返回给接口调用者了。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月26日
  • 创建了问题 10月26日

悬赏问题

  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?