socketio

在Flask中实现websocket

别来无恙 提交于 2020-02-11 12:18:39
前言 前段时间在做自有性能测试平台时,需要加入一个前端实时获取后端数据的功能。整个的项目前后端是分开的,后端项目用python的Flask框架实现,前端项目用Vue框架实现。因为我做后端,所以最开始想到的对我来说最简单的方法就是提供一个读取数据的接口,前端通过Ajax轮询的方式实时获取数据。但是轮询对前端来讲似乎工作量和复杂度高,而且考虑到网络资源的消耗,轮询显然不是一个最优的解决办法,于是想到通过websocket来解决。 知识点 websocket 对websocket的第一理解就是用于前后端实时通信,再深入研究发现其实它是一种协议。 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。 现在,很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器

Flask-SocketIO 简单使用指南

本小妞迷上赌 提交于 2020-01-22 00:16:50
技术博客: https://github.com/yongxinz/tech-blog 同时,也欢迎关注我的微信公众号 AlwaysBeta ,更多精彩内容等你来。 Flask-SocketIO 使 Flask 应用程序能够访问客户端和服务器之间的低延迟双向通信。客户端应用程序可以使用 Javascript,C ++,Java 和 Swift 中的任何 SocketIO 官方客户端库或任何兼容的客户端来建立与服务器的永久连接。 安装 直接使用 pip 来安装: pip install flask - socketio 要求 Flask-SocketIO 兼容 Python 2.7 和 Python 3.3+。可以从以下三个选项中选择此程序包所依赖的异步服务: eventlet 性能最佳,支持长轮询和 WebSocket 传输。 gevent 在许多不同的配置中得到支持。gevent 包完全支持长轮询传输,但与 eventlet 不同,gevent 没有本机 WebSocket 支持。要添加对 WebSocket 的支持,目前有两种选择:安装 gevent-websocket 包为 gevent 增加 WebSocket 支持,或者可以使用带有 WebSocket 功能的 uWSGI Web 服务器。gevent 的使用也是一种高性能选项,但略低于 eventlet。 也可以使用基于

python socket.io 坑。

我的梦境 提交于 2019-12-06 02:48:14
python下star最高的是 https://github.com/miguelgrinberg/python-socketio 是flask作者写的。client server都有了,而且还提供了async版本。但是怎么说呢,用起来有坑! 1文档太简略。 2 它的客户端和服务器端,在win下启动后,都不能及时响应键盘ctrl+C退出。要等很久很久。 而把它包装进Process,然后 p.daemon = True 设置为守护进程,这样主进程退出,就能正常退出了。 以服务器端为例,客户端同理 from multiprocessing import Process import signal import sys import eventlet import socketio clients = {} def run(port): sio = socketio.Server() app = socketio.WSGIApp(sio, static_files={ '/': {'content_type': 'text/html', 'filename': 'index.html'} }) @sio.event def connect(sid, environ): print('connect ', sid) @sio.event def disconnect(sid): print

springmvc 整合 netty-socketio

两盒软妹~` 提交于 2019-12-05 17:03:06
1 maven <dependency> <groupId>com.corundumstudio.socketio</groupId> <artifactId>netty-socketio</artifactId> <version>1.7.12</version></dependency>2 为了使服务运行启动需要实现 ApplicationListener 重写里面的方法 onApplicationEvent import com.corundumstudio.socketio.*; import com.corundumstudio.socketio.listener.ConnectListener; import com.corundumstudio.socketio.listener.DataListener; import com.corundumstudio.socketio.listener.DisconnectListener; import com.corundumstudio.socketio.listener.ExceptionListenerAdapter; import io.netty.channel.ChannelHandlerContext; import org.springframework.context

Socket.io学习

半世苍凉 提交于 2019-12-05 10:57:18
服务器端和客户端实现实时通讯的技术,服务端运行在nodejs平台,客户端运用javascript脚本 服务端: 创建socketio-demo文件夹,并进入此文件夹 第一步:安装node,npm(自行补脑) 第二步:了解vim基本操作 参考文章 http://blog.csdn.net/youngkingyj/article/details/22713965 插入模式:i 命令行模式:esc 保存并推出::wq 推出不保存::q! 第三步:创建package文件 vi package.json 第四步:安装express,检查express cnpm install --save express cat package.json 第五步: 来源: oschina 链接: https://my.oschina.net/u/2845173/blog/756876

SocketIO- GET http://localhost:3000/socket.io/?EIO=3&amp;transport=polling&amp;t=1418187395022-0 404 (Not Found)

匿名 (未验证) 提交于 2019-12-03 01:18:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am using socketIO with express. In my project I have a login page and a home page. When i do successful login i navigate to localhost:3000/home where I get this error : GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=1418187395022-0 404 (Not Found) I did not do any modification in my app.js(project created by express ). Index.js : var express = require('express'); var router = express.Router(); var http = require('http'); var fs = require('fs'); var io = require('socket.io')(http); /* GET home page. */ router.get('/',

SocketIO: disconnect client by socket id?

匿名 (未验证) 提交于 2019-12-03 01:18:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 翻译 强力驱动 问题: I have a Node server with SocketIO and several connections. How is it possible to disconnect an existing socket based on its ID? There are rooms, an admin in each room and other connections. My goal is to enable the admin socket to make any other socket disconnect based on its ID. A workaround would be to send a message to the client-to-be-kicked to ping the server back: io.to(socketId).emit('commit-suicide!'); , then it sends back an "I-am-so-suicid" message and the server calls socket.disconnect() . Now this is clearly not the

Using Flask-socketio and the socketIO client

匿名 (未验证) 提交于 2019-12-03 01:06:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I'm currently trying to understand how sockets work. I'm using Flask-socketio and a python socketio client and running through a basic example. Here is what I have done so far app.py from flask import Flask, render_template from flask_socketio import SocketIO, emit app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' socketio = SocketIO(app) @socketio.on('aaa') def test_connect(): print("Welcome, aaa received") emit('aaa_response', {'data': 'Server'}) if __name__ == '__main__': socketio.run(app, port=8000) client.py from socketIO

使用kombu的producer pool 向rabbitmq瞬间发送大量消息

*爱你&永不变心* 提交于 2019-11-30 16:10:46
kombu比pika感觉考虑得全面多了,不知道为什么用的人好像少? 生产端是 python-socket.io 的client 接受socketio 消息后, 发到rabbitmq 按时序进行处理. 进行压力测试时, 如果发送到socketio时不加延时, 一次把消息全都发了, 用pika总是报错, channel直接close了. 用kombu一开始也是这样, 使用了producer pool, 好了 https://kombu.readthedocs.io/en/stable/userguide/pools.html#guide-pools 但注意,如果消费者速度有限, 一定要注意加大rabbitmq 的queue的max_length 来源: https://www.cnblogs.com/xuanmanstein/p/11603366.html