Django TCP套接字通信 [英] Django TCP socket communication
问题描述
如果您已经熟悉django,并且您的微控制器支持发送HTTP(REST)请求并且可以解析Json,则可以添加一个返回json的常规django视图:
#views.py
from django.http import JsonResponse
def my_view(request):
#handle这里可能使用请求。 GET / request.POST
return JsonResponse({'status':'OK'})
但是,如果您的微控制器非常简单,无法执行HTTP / json,则可以使用简单的 SocketServer ,而不是从python的标准库:
import SocketServer
类MyTCPHandler(Socke tServer.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(1024).strip()
print{}写道: .format(self.client_address [0])
print self.data
#只是发回相同的数据,但是上面的
self.request.sendall(self.data.upper )
如果__name__ ==__main__:
HOST,PORT =localhost,9999
server = SocketServer.TCPServer((HOST,PORT),MyTCPHandler)
server.serve_forever()
请记住,您仍然可以导入django的库并使用django的ORM (DB)在SocketServer内。
另一个流行的选项是使用 Tornado的tcpserver :
from tornado.ioloop import IOLoop
from tornado .tcpserver import TCPServer
class MyTCPServer(TCPServer):
def handle_stream(self,stream,addr $)
def got_data(data):
printInput:{}。format(repr(data))
stream.write(OK,stream.close)
stream.read_until(\\\
,got_data)
如果__name__ =='__main__':
server = MyTCPServer()
server.listen(9876)
IOLoop.instance()。start()
I am new to TCP socket programming. I have a django based server communicating with a microcontroller. Now, I want to implement TCP based socket on the server side in order to communicate with the TCP socket on the microcontroller. Can anyone give me an idea on how to do this ? What libraries should I use on my django server The microprocessor basically opens the socket every 5 seconds and sends a notification to the server. I on the server side should be able to read this and pump data back to the microprocessor using this socket which was opened by the microprocessor.
If you are already familiar with django, and your microcontroller supports sending HTTP (REST) requests and can parse Json , you can just add a regular django based view that returns 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'})
However, if your microcontroller is very simple and cannot do HTTP/json, you can use a simple SocketServer from python's standard library instead:
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()
Keep in mind you can still import django's libraries and use django's ORM (DB) inside a SocketServer.
Another popular option is to use 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()
这篇关于Django TCP套接字通信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!