Python Django通道或Tornado,用于基于套接字的连接

Python Django通道或Tornado,用于基于套接字的连接,python,django,websocket,django-channels,Python,Django,Websocket,Django Channels,我正在从事一个项目,在该项目中,我有一个可通过Django Rest API查看的加油站列表,显示加油站数据,即燃油可用性和容量 我还开发了一个微控制器来检测燃油油位。现在的问题是,这些数据将每隔10分钟发送到我的web后端(将来可能会减少到1分钟),通过RESTAPI更新站点模型。我不知道该怎么办。像Django这样的频道在这种情况下有用吗 服务器混合使用C和Java来发送数据。我需要它是一个可扩展的解决方案,因为有可能创建许多电台。我将回答我自己的问题。WebSocket允许双向通信机制,无

我正在从事一个项目,在该项目中,我有一个可通过Django Rest API查看的加油站列表,显示加油站数据,即燃油可用性和容量

我还开发了一个微控制器来检测燃油油位。现在的问题是,这些数据将每隔10分钟发送到我的web后端(将来可能会减少到1分钟),通过RESTAPI更新站点模型。我不知道该怎么办。像Django这样的频道在这种情况下有用吗


服务器混合使用C和Java来发送数据。我需要它是一个可扩展的解决方案,因为有可能创建许多电台。

我将回答我自己的问题。WebSocket允许双向通信机制,无论是在客户端浏览器和web服务器之间还是服务器到服务器之间

关于如何在客户端浏览器和web服务器之间建立这种连接,有很多教程,但关于如何在两台服务器之间交互的文档非常有限

如果已设置Django频道并监听传入连接,即127.0.0.1:8001

因此,您的consumers.py将有一个代码,如ws_message,用于路由任何传入消息。它只需将接收到的信息回显到终端

from channels import Group
def ws_message(message):
    print(message.content['text'])
    Group('chat').send({
        'text': 'user %s' % message.content['text'],
    })
然后,如果您想从其他服务器(可能是传输数据的微控制器)建立连接,以下代码将数据发送到指定地址127.0.0.1:8001。 请注意,您将需要用于python的websocket软件包,以确保您能做到这一点

pip安装websocket

server-socket.py

import websocket
import _thread as thread
import time

def on_message(ws, message):
    print(message)

def on_error(ws, error):
    print(error)

def on_close(ws):
    print('Closed Connection')

def on_open(ws):
    def run(*args):
        for i in range(100):
            time.sleep(1)
            ws.send("%d" % i)
        time.sleep(1)
        ws.close()
        print ("thread terminating...")
    thread.start_new_thread(run, ())


if __name__ == "__main__":
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("ws://127.0.0.1:8001",
                                 on_message = on_message,
                                 on_error = on_error,
                                 on_close = on_close)
    ws.on_open = on_open
    ws.run_forever()

这相当简单。它将0-99范围内的数字发送到连接的websocket。

是。频道是实现这一目的的最佳选择。另外,这个问题是离题的,因为你没有提供任何cod…谢谢你的回答Raja。问题与代码无关,但与方法相关,因此没有代码。