Django TCP套接字通信

时间:2015-03-27 18:38:45

标签: django tcp socket.io tcp-ip

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

1 个答案:

答案 0 :(得分:4)

如果你已经熟悉django,并且你的微控制器支持发送HTTP(REST)请求并且可以解析Json,你可以添加一个返回json的常规基于django的视图:

# 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()

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

另一种流行的选择是使用Tornado's 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()