python3.6 websocket异步高并发_Python3.6 websocket开发
message_queues ={}
client_socket_fd_map={}defstart_socket_select_server():
sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
sock.bind(('0.0.0.0', 8002))
sock.listen(5)print("WebSocket 服务器启动成功 监听IP", ('127.0.0.1', 8002))
sock.setblocking(False)
inputs=[sock, ]
outputs=[]whileTrue:
readable, writeable, exceptional=select.select(inputs, outputs, inputs)#print('select finish, inputs size:%d, outputs size:%d' % (len(inputs), len(outputs)))
for s inreadable:if s issock:
conn, client_addr=s.accept()print("new connection from", client_addr)
conn.setblocking(False)
inputs.append(conn)
message_queues[conn]=queue.Queue()else:if s not inoutputs:#第一次 表示 websocket的握手
data = s.recv(1024)ifdata:print('received [%s] from %s' %(data, s.getpeername()[0]))#message_queues[s].put(data)
headers=get_headers(data)
response_tpl= "HTTP/1.1 101 Switching Protocols\r\n"\"Upgrade: websocket\r\n"\"Connection: Upgrade\r\n"\"Sec-WebSocket-Accept: %s\r\n"\"WebSocket-Location: ws://%s%s\r\n\r\n"sha1=hashlib.sha1()
magic_string= "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"value= headers['Sec-WebSocket-Key'] +magic_string
sha1.update(value.encode('utf-8'))
ac=base64.b64encode(sha1.digest())
response_str= response_tpl %(
ac.decode('utf-8'), headers['Host'], headers['url'])
s.send(bytes(response_str, encoding='utf-8'))
# 这里将文件描述符返回给浏览器 浏览器可以在接下来的http请求中带上这个参数 服务端就可以向这个文件描述符中写入信息返回给指定浏览器
fileno_dict_str= '{"type":1, "body":%s}' %s.fileno()
message_queues[s].put(fileno_dict_str)if s not inoutputs:
outputs.append(s)
client_socket_fd_map[s.fileno()]=selse:#表示客户端已经断开
print("~~~~~~~~~~~client [%s] closed" %s)if s inoutputs:
outputs.remove(s)delmessage_queues[s]delclient_socket_fd_map[s.fileno()]
inputs.remove(s)
s.close()else:#websocket 通信
data = s.recv(8096)ifdata:pass
else:#表示客户端已经断开
print("-------------client [%s] closed" %s)if s inoutputs:
outputs.remove(s)delmessage_queues[s]delclient_socket_fd_map[s.fileno()]
inputs.remove(s)
s.close()for s inwriteable:try:
next_msg=message_queues[s].get_nowait()exceptqueue.Empty:pass
else:
send_msg(s, next_msg)
python3.6 websocket异步高并发_Python3.6 websocket开发相关推荐
- python websocket异步高并发_Python3.5异步和多个websocket服务器
我在Ubuntu上使用pythonwebsockets4.0.1.我想有2个websocket服务器运行.我可以通过为每个线程创建2个线程和独立的事件循环来实现这一点.我所说的"某种工作&q ...
- python3.6 websocket异步高并发_在Python3.6上的websocket客户端中侦听传入消息时出现问题...
我正在尝试使用websockets包在Python上构建一个websockets客户端:Websockets 4.0 API 我使用这种方式而不是示例代码,因为我想创建一个websocket客户机类对 ...
- python websocket异步高并发_高并发异步uwsgi+web.py+gevent
为什么用web.py? python的web框架有很多,比如webpy.flask.bottle等,但是为什么我们选了webpy呢?想了好久,未果,硬要给解释,我想可能原因有两个:第一个是兄弟项目组用 ...
- python websocket异步高并发_python – WebSocket聊天异步示例崩溃
我一直试图在Apple Mac上运行这里提供的websocket聊天示例. https://github.com/unbit/uwsgi/blob/master/tests/websockets_ch ...
- netty框架实现websocket达到高并发
websocket(三) 进阶!netty框架实现websocket达到高并发 引言: 在前面两篇文章中,我们对原生websocket进行了了解,且用demo来简单的讲解了其用法.但是在实际项目中,那 ...
- 一个高并发的测试websocket脚本
一个高并发的测试websocket脚本 根据最近公司上线一个直播项目,但是有一天测试那边一脸苦逼的来找到我,问我有什么好工具可以实现高并发的测试,他使用jmeter限制了400个并发数(个人没去研究过 ...
- python异步高并发_通过python异步通讯方式构建高并发压力测试工具
背景说明 在工作中,要对一个接口进行压测,我当时就想通过python自己编写一个压力发生器. 初步方案(单线程循环发送) 通过循环向服务端发送请求,代码如下: #采用单步循环的方式循环测试 impor ...
- python异步高并发_python高并发异步服务器核心库forkcore使用方法
1 拷贝下面的代码到一个文件,并命名为forkcore.py import os import threading import select import socket class ds_forkc ...
- 钱多多的高并发TCP服务器的开发经历
感兴趣的,可以私聊呀! 这年头,居然有老板给钱多多布置这样的人物! 难为了,钱多多了,他的夜生活奔溃了!
最新文章
- 使用范型观察者模式观察多个数据的实现
- C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态
- Android Telephony分析(六) ---- 接口扩展(实践篇)
- iOS开发之检查更新
- 并发编程中的“冷知识”(更新中)
- Too Many Segments (easy version) CodeForces - 1249D1(贪心+差分)
- git 拉取远端仓库_git命令-远程仓库拉取、本地仓库更新、工作空间提交等等
- jdk监控与故障处理工具
- 荣耀 升级 鸿蒙,荣耀终于放出大招!4部荣耀旗舰可升级鸿蒙,网友:终于等到了...
- r 语言ylim = c(0 1),今日R--条形图(barplot)
- Centos7安装nxlog-2.9
- OpenPose的使用
- matlab中用plot函数绘制的常用设置以及五点三次平滑法的实现
- 同事在上班期间在干私活,要不要告诉老板!
- python禅语_但行好事,莫问前程,如何理解?
- 仿进入GameCenter的五个气球效果
- ARIMA时间序列分析——(一)数据平稳性检验
- vue项目接入eslint、prettier、husky+lint-staged
- C# 第三方开源控件库,非常强大实用,好比devexpress
- 亚马逊测评自养号,小白应该如何开始?
热门文章
- 计算机旁边快速访问没有桌面图标了怎么办,桌面找不到我的电脑(计算机)图标的解决办法-win10桌面显示我的电脑...
- linux自动挂起什么意思,Linux中进行挂起(待机)的命令说明
- 跑faster rcnn测试时遇到错误Attribute Error: 'NoneType' object has no attribute 'astype'
- Linux下patch的制作和应用
- 记一次laravel-jwt修改黑名单所用redis数据库
- DRBD 高可用配置详解(转)
- Linux下VSFTP配置全攻略
- 反射中使用 BindingFlags.IgnoreCase
- 求时间差的sql语句。 比如如下数据
- .NET实现之(自动更新)