当socket server和views.py分成两个文件时,如何通过Django视图发送套接字消息?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当socket server和views.py分成两个文件时,如何通过Django视图发送套接字消息?相关的知识,希望对你有一定的参考价值。
环境:Python 3.6和Django 2.1
我创建了一个Django网站和一个套接字服务器,文件组织如下:
- 卷筒纸
...
用户(Django应用程序)
__init__.py
views.py ... server.py
实际上我想用django构建一个伞形租赁系统,服务器通过多线程套接字连接到伞架(发送一些消息)。就像我按下借位按钮,views.py
可以调用服务器test_function并向连接的伞架发送一些消息。
我可以在views.py
中导入服务器变量或函数,但在server.py
运行时我无法得到正确的答案。所以我想问你是否可以给我一些建议。非常感谢!
顺便说一句,我试图直接在clients
中导入全局变量views.py
,但仍然得到了[]
。
server.py
定义了一个多线程服务器,基本如下:
clients = []
class StuckThread(threading.Thread):
def __init__(self, **kwargs):
self.name = kwargs.get('name', '')
def run(self):
while True:
# do something
def func1(self):
# do something
def test_function(thread_name):
# if the function is called by `views.py`, then `clients = []` and return 'nothing', but if I call this function in `server.py`, then I can get a wanted result, which is `got the thread`
for client in clients:
if client['thread'].name == thread_name:
return 'got the thread'
return 'nothing'
if __name__ == '__main__':
ip_port = ('0.0.0.0', 65432)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ip_port)
server.listen(max_listen_num)
while True:
client, address = socket.accept()
param = {'name': 'test name'}
stuck_thread = StuckThread(**param)
clients.append({"client": client, "address": address, "thread": stuck_thread})
stuck_thread.start()
我有一个像这样的Django views.py
def view_function(request):
from server import clients
print(clients) # got []
form server import test_function
print(test_function('test name')) # got 'nothing'
return render(request, 'something.html')
我通过django views.py和server.py之间的套接字通信解决了这个问题。我打开另一个端口来接收来自views.py的消息。按下借用按钮后,views.py中的套接字客户端将构建并向服务器发送参数和其他消息。
以上是关于当socket server和views.py分成两个文件时,如何通过Django视图发送套接字消息?的主要内容,如果未能解决你的问题,请参考以下文章
当我们可以通过在urls.py中的views.py和urls中添加视图时,是否需要在ModelAdmin类的管理页面中添加自定义视图?
当 Django views.py 没有将字典值传递给 html 时如何解决?
如何使用 jQuery/AJAX 访问 views.py 中的变量?