django渠道:让两台服务器通过websocket相互通信

时间:2018-06-24 21:47:53

标签: python django

首先,我应该说我对django和Web开发一般还很陌生,所以很可能我做错了事。

基本上,我有一台服务器(中间件),该服务器应接受json中包含一些数据的post http请求,然后检查我的数据库(位于另一台服务器上)是否可用,然后将其发送到该服务器(它实际上是一个群集)(如果不是),则通过websocket连接将其保存在本地数据库中。 在这里,我只是想让服务器以我希望它们彼此通信的方式进行通信。 因此,据我所知,我应该在中间件服务器上创建一个视图,如下所示:

from rest_framework_mongoengine import viewsets
# some other imports

class DataView(viewsets.ModelViewSet):
    def create(self, request):
        channel_layer = layers.get_channel_layer()
        async_to_sync(channel_layer.send)
        (
             'test_channel',
              request.data
        )
        return Response(
            status=status.HTTP_200_OK
        )

但是我不太了解集群中应该包含什么。从理论上讲,集群应该通过websockets从中间件服务器接收传入的数据并将其保存,然后再通过ws协议向客户端发出一些信息。我想了解的是如何接受来自中间件的传入数据。 群集应侦听来自中间件服务器的数据。因此,那里必须有一个消费者:

class DataConsumer(WebsocketConsumer):
    def connect(self):
        self.channel = self.scope['url_route']['kwargs']['channel']
        self.accept()

    def disconnect(self):
        # here goes some code managing the termination of connection
        pass

    def receive(self, data):
        # I don't understand what should be here.

在我的 routing.py 中,我有以下代码:

websocket_urlpatterns = [
    path('ws/channel/test_channel', consumers.DataConsumer),
]

因此,首先我必须以某种方式激活(打开)此test_channel,然后使其接受来自发送服务器的数据。

0 个答案:

没有答案