Django TCP套接字通信

4
我是新手,对TCP套接字编程不熟悉。我有一个基于Django的服务器与微控制器通信。现在,我想在服务器端实现基于TCP的套接字以便与微控制器上的TCP套接字通信。请问有人可以给我一个实现思路吗?我应该在我的Django服务器上使用哪些库?微处理器每5秒钟打开一次套接字并向服务器发送通知。我需要能够在服务器端读取此通知,并通过由微处理器打开的套接字将数据传送回微处理器。

你有Django的经验吗? - Udi
1个回答

5
如果您已经熟悉django,且您的微控制器支持发送HTTP(REST)请求并能解析Json,则可以添加一个基于常规django的视图来返回json。
# views.py
from django.http import JsonResponse
def my_view(request):
    # handle input here, probably using request.GET / request.POST
    return JsonResponse({'status': 'OK'})

然而,如果您的微控制器非常简单,无法执行HTTP/json,您可以使用Python标准库中的简单SocketServer代替:

import SocketServer

class MyTCPHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        self.data = self.request.recv(1024).strip()
        print "{} wrote:".format(self.client_address[0])
        print self.data
        # just send back the same data, but upper-cased
        self.request.sendall(self.data.upper())

if __name__ == "__main__":
    HOST, PORT = "localhost", 9999
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()

请记住,在 SocketServer 中仍然可以导入 Django 库并使用 Django 的 ORM(数据库)。

另一个流行的选择是使用 Tornado 的 tcpserver

from tornado.ioloop import IOLoop
from tornado.tcpserver import TCPServer


class MyTCPServer(TCPServer):
    def handle_stream(self, stream, address):
        def got_data(data):
            print "Input: {}".format(repr(data))
            stream.write("OK", stream.close)

        stream.read_until("\n", got_data)


if __name__ == '__main__':
    server = MyTCPServer()
    server.listen(9876)
    IOLoop.instance().start()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接