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('disconnect ', clients[sid]) print('启动服务器', port)
eventlet.wsgi.server(eventlet.listen(('', port)), app) if __name__ == '__main__':
p=Process(target=run,args=(9090,))
p.daemon = True
p.start()
#p.terminate()
print('主进程启动') def signal_handler(signal, frame):
print('关闭从进程')
#p.terminate()
print('主进程退出')
sys.exit(0) signal.signal(signal.SIGINT,signal_handler)
while True:
pass

但是client 属于强退。clietn退出后N久,才回在服务器端显示:

“ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。”

但是,不论客户端还是服务器端,都没有响应到disconnect, 因为根本就不是正常退出的

而且用Process 的方法,还有个问题,就是占用主机CPU,主进程始终在死循环。直接站走1个CPU,太坑了。

解决方法:

    sio = socketio.Client()

    @sio.event
def connect():
print("I'm connected!")
sio.emit('auth_mobile', {'ip': get_host_ip(), 'hardware': hardware_info}) @sio.event
def disconnect():
print("I'm disconnected!") try:
sio.connect(f'http://{ip_admin}:{port}')
#sio.wait()
except socketio.exceptions.ConnectionError:
print('连接admin失败')

不使用sio.wait()

就可以正常退出了,而且暂时没发现问题

python socket.io 坑。的更多相关文章

  1. 【踩坑】socket.io服务器不能访问

    今天在单机测试socket.io服务器时一切正常,但用jar包的方式部署在服务器时发现客户端无法连接. 于是做了一系列排查,如检查端口是否在占用,防火墙有没有开放该端口,阿里云终端是否有开放安全组,本 ...

  2. Node学习笔记(三):基于socket.io web版你画我猜(二)

    上一篇基础实现的功能是客户端canvas作图,导出dataURL从而实现图片信息推送,下面具体讲下服务端的配置及客户端的配置同步 首先先画一个流程图,讲下大概思路 <canvas id=&quo ...

  3. Python异步IO --- 轻松管理10k+并发连接

    前言   异步操作在计算机软硬件体系中是一个普遍概念,根源在于参与协作的各实体处理速度上有明显差异.软件开发中遇到的多数情况是CPU与IO的速度不匹配,所以异步IO存在于各种编程框架中,客户端比如浏览 ...

  4. nodejs + socket.io + redis 新手上路

    最近要更新网站架构了,决定转入 nodejs + socket.io + redis 方式. 战斗刚开始: 网上的文章太松散,我根据各个网友的分享进行整理 ,让大家可以方便上手. 进入node.js之 ...

  5. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...

  6. Node+Express+MongoDB + Socket.io搭建实时聊天应用

    Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战 ...

  7. Socket.io 延伸

    项目正好用到了即时通讯功能,于是研究到了webSocket技术,后来发现了可以在web.[Android].[iOS]上同时使用的解决方案,那就是SocketIO.其实现原理啥的不做介绍了,直接贴上I ...

  8. 基于 socket.io, 简单实现多平台类似你猜我画 socket 数据传输

    一.前言 socket.io 实现了实时双向的基于事件的通讯机制,是基于 webSocket 的封装,但它不仅仅包括 webSocket,还对轮询(Polling)机制以及其它的实时通信方式封装成了通 ...

  9. python 浅析IO 模型

    协程:遇到IO操作就切换,但是什么时候切回去呢?怎么确定IO操作? 很多程序员可能会考虑使用"线程池"或"连接池"."线程池"旨在减少创建和 ...

随机推荐

  1. python函数篇0-2

    函数的有三中不同的参数: 普通参数 默认参数 动态参数# ######### 定义函数 ######### # name 叫做函数func的形式参数,简称:形参def func(name):    p ...

  2. OAuth授权看这篇就够了

    OAuth授权看这篇就够了

  3. oracle sqlplus执行sql语句字符集问题

    因为业务需要,现将一些包含中文的insert语句导入到oracle数据库中,由于数据量比较大,通过pl/sql*plus导入时非常慢(实测1.5M的文件大概执行20分钟),现在oracle服务器sql ...

  4. JS基础_for循环练习2

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. LeetCode 腾讯精选50题--数组中的第K个最大元素

    好吧,不得不承认,书上看到的始终不是自己的,只有亲身时间过才会明白该怎么操作. 找数组中第K个最大元素,简而言之就是先排序,不论使用哪种算法,都需要先排序,确认位置,由于数组可以通过下标直接访问,所以 ...

  6. array数据处理

    之前写过map,forEach,现在用到every和some,记录一下当作学习笔记,方便以后翻阅. forEach是没有返回值的,对原数组进行修改: // forEach没有返回值,只针对每个元素调用 ...

  7. 【漏洞分析】Discuz! X系列全版本后台SQL注入漏洞

    0x01漏洞描述 Discuz!X全版本存在SQL注入漏洞.漏洞产生的原因是source\admincp\admincp_setting.php在处理$settingnew['uc']['appid' ...

  8. vue入门 0 小demo (挂载点、模板、实例)

    vue入门 0 小demo  (挂载点.模板) 用直接的引用vue.js 首先 讲几个基本的概念 1.挂载点即el:vue 实例化时 元素挂靠的地方. 2.模板 即template:vue 实例化时挂 ...

  9. Windows下Mysql 用户忘记密码时修改密码

    一般这种情况都可以用安全模式下修改来解决.安全模式下即跳过权限检查,输入账号后直接登录进mysql 1.使用管理员权限打开dos窗口,进入mysql安装目录的bin文件夹下,将Mysql服务关闭 sc ...

  10. 网络初级篇之STP(BPDU详解与STP故障恢复)

    一.BPDU包含的参数 通过STP的原理,我们学习了红色部分的字段(根桥ID.根路径开销.桥ID.端口ID).现在讲解一下黄色部分的字段(类型.计时器.老化时间.访问时间) 1.(BPDU Type) ...