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