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开发相关推荐

  1. python websocket异步高并发_Python3.5异步和多个websocket服务器

    我在Ubuntu上使用pythonwebsockets4.0.1.我想有2个websocket服务器运行.我可以通过为每个线程创建2个线程和独立的事件循环来实现这一点.我所说的"某种工作&q ...

  2. python3.6 websocket异步高并发_在Python3.6上的websocket客户端中侦听传入消息时出现问题...

    我正在尝试使用websockets包在Python上构建一个websockets客户端:Websockets 4.0 API 我使用这种方式而不是示例代码,因为我想创建一个websocket客户机类对 ...

  3. python websocket异步高并发_高并发异步uwsgi+web.py+gevent

    为什么用web.py? python的web框架有很多,比如webpy.flask.bottle等,但是为什么我们选了webpy呢?想了好久,未果,硬要给解释,我想可能原因有两个:第一个是兄弟项目组用 ...

  4. python websocket异步高并发_python – WebSocket聊天异步示例崩溃

    我一直试图在Apple Mac上运行这里提供的websocket聊天示例. https://github.com/unbit/uwsgi/blob/master/tests/websockets_ch ...

  5. netty框架实现websocket达到高并发

    websocket(三) 进阶!netty框架实现websocket达到高并发 引言: 在前面两篇文章中,我们对原生websocket进行了了解,且用demo来简单的讲解了其用法.但是在实际项目中,那 ...

  6. 一个高并发的测试websocket脚本

    一个高并发的测试websocket脚本 根据最近公司上线一个直播项目,但是有一天测试那边一脸苦逼的来找到我,问我有什么好工具可以实现高并发的测试,他使用jmeter限制了400个并发数(个人没去研究过 ...

  7. python异步高并发_通过python异步通讯方式构建高并发压力测试工具

    背景说明 在工作中,要对一个接口进行压测,我当时就想通过python自己编写一个压力发生器. 初步方案(单线程循环发送) 通过循环向服务端发送请求,代码如下: #采用单步循环的方式循环测试 impor ...

  8. python异步高并发_python高并发异步服务器核心库forkcore使用方法

    1 拷贝下面的代码到一个文件,并命名为forkcore.py import os import threading import select import socket class ds_forkc ...

  9. 钱多多的高并发TCP服务器的开发经历

    感兴趣的,可以私聊呀! 这年头,居然有老板给钱多多布置这样的人物! 难为了,钱多多了,他的夜生活奔溃了!

最新文章

  1. 使用范型观察者模式观察多个数据的实现
  2. C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态
  3. Android Telephony分析(六) ---- 接口扩展(实践篇)
  4. iOS开发之检查更新
  5. 并发编程中的“冷知识”(更新中)
  6. Too Many Segments (easy version) CodeForces - 1249D1(贪心+差分)
  7. git 拉取远端仓库_git命令-远程仓库拉取、本地仓库更新、工作空间提交等等
  8. jdk监控与故障处理工具
  9. 荣耀 升级 鸿蒙,荣耀终于放出大招!4部荣耀旗舰可升级鸿蒙,网友:终于等到了...
  10. r 语言ylim = c(0 1),今日R--条形图(barplot)
  11. Centos7安装nxlog-2.9
  12. OpenPose的使用
  13. matlab中用plot函数绘制的常用设置以及五点三次平滑法的实现
  14. 同事在上班期间在干私活,要不要告诉老板!
  15. python禅语_但行好事,莫问前程,如何理解?
  16. 仿进入GameCenter的五个气球效果
  17. ARIMA时间序列分析——(一)数据平稳性检验
  18. vue项目接入eslint、prettier、husky+lint-staged
  19. C# 第三方开源控件库,非常强大实用,好比devexpress
  20. 亚马逊测评自养号,小白应该如何开始?

热门文章

  1. 计算机旁边快速访问没有桌面图标了怎么办,桌面找不到我的电脑(计算机)图标的解决办法-win10桌面显示我的电脑...
  2. linux自动挂起什么意思,Linux中进行挂起(待机)的命令说明
  3. 跑faster rcnn测试时遇到错误Attribute Error: 'NoneType' object has no attribute 'astype'
  4. Linux下patch的制作和应用
  5. 记一次laravel-jwt修改黑名单所用redis数据库
  6. DRBD 高可用配置详解(转)
  7. Linux下VSFTP配置全攻略
  8. 反射中使用 BindingFlags.IgnoreCase
  9. 求时间差的sql语句。 比如如下数据
  10. .NET实现之(自动更新)