我正在开展一个项目,我有一个可通过Django Rest API查看的加油站列表,显示车站数据,即燃料和容量的可用性。
我还开发了一种微控制器来检测燃油油位。现在问题是这个数据将每10分钟发送到我的网络后端(将来可以减少到1分钟),通过其余的api更新站点模型。我不知道如何处理这个问题。在这种情况下,Django频道会有用吗?
服务器使用C和Java的混合来发送数据。我需要它是一个可扩展的解决方案,因为有可能创建许多站点。
答案 0 :(得分:1)
我会回答我自己的问题。 Websockets允许双向通信机制,无论是在客户端浏览器和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 install 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。