Django TCP 套接字通信

bhu*_*van 3 django tcp tcp-ip socket.io

我是 TCP 套接字编程的新手。我有一个基于 Django 的服务器与微控制器通信。现在,我想在服务器端实现基于 TCP 的套接字,以便与微控制器上的 TCP 套接字进行通信。谁能给我一个如何做到这一点的想法?我应该在我的 django 服务器上使用哪些库微处理器基本上每 5 秒打开一次套接字并向服务器发送通知。服务器端的我应该能够读取它并将数据泵回微处理器,使用由微处理器打开的这个套接字。

Udi*_*Udi 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'})
Run Code Online (Sandbox Code Playgroud)

但是,如果您的微控制器非常简单并且无法执行 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()
Run Code Online (Sandbox Code Playgroud)

请记住,您仍然可以导入 django 的库并在 SocketServer 中使用 django 的 ORM (DB)。

另一个流行的选择是使用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()
Run Code Online (Sandbox Code Playgroud)