热门标签 | 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运行发射可以解决此问题。


推荐阅读
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • PyCharm中配置Pylint静态代码分析工具
    本文详细介绍如何在PyCharm中配置和使用Pylint,帮助开发者进行静态代码检查,确保代码符合PEP8规范,提高代码质量。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
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社区 版权所有