热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

带有Django和pythonsocketio的eventlet

每当我尝试将客户端连接到该服务器时,它都会成功连接,并且当客户端使用某

每当我尝试将客户端连接到该服务器时,它都会成功连接,并且当客户端使用某些数据触发事件“聊天”时,它会以以下方式返回响应:
 “已收到您的味精” +已发送数据
“欢迎”

每当客户端触发“聊天”事件服务器时,sio也会触发“聊天”事件,但是如果服务器本身希望向客户端触发事件“聊天”,则它不起作用
我尝试了类似的东西

import eventlet
eventlet.monkey_patch()

然后我尝试

sio.start_background_task()

之后,我也尝试了普通的线程处理,但这还是行不通的。

除此之外,我也尝试过

eventlet.spawn()

但仍然没有改善。
我应该如何进行?

socketio_app / views.py

import threading
import time
import eventlet
eventlet.monkey_patch()
from django.shortcuts import render
# Create your views here.
import socketio
sio = socketio.Server(async_mode='eventlet')
@sio.event
def connect(sid,environ):
print('connected to ',sid)
return True
@sio.event
def disconnect(sid):
print("disconnected",sid)
@sio.on('chat')
def on_message(sid,data):
print('I received a message!',data)
sio.emit("chat","received your msg" + str(data))
sio.emit("chat","welcome")
@sio.event
def bg_emit():
print("emiitting")
# sio.emit('chat',dict(foo='bar'))
sio.emit('chat',data='ment')
def bkthred():
print("strting bckgroud tsk")
while True:
eventlet.sleep(5)
bg_emit()
def emit_data(data):
print("emitting strts")
# sio.start_background_task(target=bkthred)
eventlet.spawn(bkthred)

supervisord.conf

[program:gunicorn]
command=gunicorn --name ProLogger-gunicorn --workers 2 ProLogger.wsgi:application --bind 0.0.0.0:8000 --timeout 100 -k eventlet
#directory=/home/ubuntu/ProLoggerBackend/
directory=/home/nimish/PycharmProjects/ProLoggerBackend/ProLogger/
stdout_logfile=/home/ubuntu/logs/gunicorn_output.log
stderr_logfile=/home/ubuntu/logs/gunicorn_error.log
autostart=true
autorestart=true
startretries=10
envirOnment=PYTHOnUNBUFFERED=1
[program:gunicornsocketio]
command=gunicorn --name ProLoggerSocket-gunicorn --workers 1 ProLogger.wsgi:socket_application --bind 0.0.0.0:5000 -k eventlet
#directory=/home/ubuntu/ProLoggerBackend/
directory=/home/nimish/PycharmProjects/ProLoggerBackend/ProLogger/
stdout_logfile=/home/ubuntu/logs/gunicornsocket_output.log
stderr_logfile=/home/ubuntu/logs/gunicornsocket_error.log
autostart=true
autorestart=true
startretries=10
envirOnment=PYTHOnUNBUFFERED=1

端口8000运行主应用程序
端口5000运行套接字

wsgi.py

from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE","ProLogger.settings")
from utility.environment_utils import set_settings_module
import socketio
from socketio_app.views import sio
application = get_wsgi_application()
socket_application = socketio.WSGIApp(sio,application)

我的简单测试客户端应用程序

import socketio
sio = socketio.Client()
@sio.event
def connect():
print('connection established')
@sio.on("chat")
def my_message(data):
print('message received with ',data)
@sio.event
def disconnect():
print('disconnected farom server')
sio.connect('http://0.0.0.0:5000')
# sio.connect('http://3.17.182.118:5000')
# sio.wait()
# socketio.WSGIApp()
# socketio.Server()
sio.emit("chat","hello")

我应该如何进行进一步操作,以便服务器本身可以触发“聊天”事件?
并不是像现在这样的确认(即,每当客户端触发“聊天”服务器时也会触发“聊天”)

那么,如何从Django视图中触发事件?



https://github.com/miguelgrinberg/python-socketio/issues/155#issuecomment-353529308
此评论帮助我检查了运行wsgi和套接字服务器的进程ID
我所做的最大错误是试图从端口8000的套接字服务器发出消息,但该服务器实际上已连接到端口5000。
 因此,从进程端口5000运行发射可以解决此问题。


推荐阅读
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • python+selenium十:基于原生selenium的二次封装fromseleniumimportwebdriverfromselenium.webdriv ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有