服务器发消息给所有人,我需要服务器向所有客户端(Python、sockets)发送消息...
如果需要向所有客户端发送消息,则需要以某种方式保存所有客户端的集合。例如:clients = set()
clients_lock = threading.Lock()
def listener(client, address):
print "Accepted connection from: ", address
with clients_lock:
clients.add(client)
try:
while True:
data = client.recv(1024)
if not data:
break
else:
print repr(data)
with clients_lock:
for c in clients:
c.sendall(data)
finally:
with clients_lock:
clients.remove(client)
client.close()
将其中的一部分分解成单独的函数可能会更清楚,比如一个完成所有发送的broadcast函数。
无论如何,这是最简单的方法,但也有问题:如果一个客户机的连接速度很慢,那么其他所有人都可能无法向其写入数据。当他们在轮到他们写的时候,他们没有读任何东西,所以你可以溢出缓冲区并开始断开所有人的连接。
如果一个客户机有错误,其线程正在写入该客户机的客户机可能会收到异常,这意味着您最终将断开与错误用户的连接。
因此,一个更好的解决方案是给每个客户机一个队列,以及一个服务于该队列的writer线程和reader线程。(然后,你可以通过各种方式扩展这个功能,限制排队,这样人们就不会再试图与落后太远的人交谈,等等。)
正如Anzel所指出的,除了为每个客户机使用一个(或两个)线程之外,还有一种不同的服务器设计方法:使用reactor多路复用所有客户机事件。
Python 3.x内置了一些很棒的库,但是2.7只有笨重过时的^{}/^{}和低级的^{}。
正如Anzel所说,Python SocketServer: sending to multiple clients有一个使用asyncore的答案,值得一读。但我不会真的用这个。如果你想用Python 2.x编写一个基于reactor的服务器,我要么使用一个更好的第三方框架,比如Twisted,要么找到或编写一个直接位于select上的非常简单的框架。
服务器发消息给所有人,我需要服务器向所有客户端(Python、sockets)发送消息...相关推荐
- 使用python+微信发送消息提醒,实现程序监控
使用python+微信发送消息提醒,实现程序监控 使用python+微信可以非常方便的提醒自己运行的程序是否报错,监控程序运行状态 1.申请微信测试号 https://mp.weixin.qq.com ...
- chatgpt赋能python:Python如何发送消息到微信群?一步步教你实现
Python如何发送消息到微信群?一步步教你实现 在生活和工作中,我们用微信的频率越来越高,微信群也成了我们工作和社交中不可或缺的一部分.那么如何用Python来实现消息的自动发送到微信群呢?本文就为 ...
- 查看当前服务器中的所有的topic,创建topic,删除topic,通过shell命令发送消息,通过shell消费消息,查看topic详情,对分区数进行修改
一. Kafka常用操作命令 查看当前服务器中的所有topic [root@hadoop3 kafka]# bin/kafka-topics.sh --list --zookeeper hadoo ...
- python微信发送消息过于频繁_微信发送信息频率上限?
请问有人知道微信发送信息频率上限是多少吗? 自己的机器人碰到的问题... 希望大家可以来帮助讨论下 先谢过啦 简单介绍下背景: 功能上基本上就是群发,且群发的信息对不同人是不一样的. 然后希望能够越准 ...
- 【Python定时发送消息到微信】
前言 哔咘:"你看下明天天气呢?我好准备明天穿的衣服鞋子." 叭卟没做回应,心想怎么又问啊,自己不知道看吗. 哔咘一个温柔的眼神,叭卟立刻回答道:"要得,天气预报马上看. ...
- python 定时发送消息给微信好友
1.爬取爱情的文艺句子 import requests from lxml import etree import redef save_file(love_sentences):with open( ...
- 【kafka连载四】window系统python环境发送消息和消费消息
前提 1.已安装kafka-python模块 2.已启动zookeeper服务 3.已启动kafka服务 一.编辑发送消息code #coding=utf-8from kafka import Kaf ...
- Socket(套字节)编程,客户端 服务器端的发送消息
一.服务器端口 服务器端代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using Sys ...
- 写一个python定时发送消息的脚本——每天跟你女盆友说晚安
首先 你要有个女朋友 效果 需要安装几个包 pip install wxpy pip install wechat_sender pip install requests 代码如下 from __fu ...
最新文章
- 感觉 Mongodb 的操作 还没 mysql 方便 。。。。
- XILINX资源获取
- docker电子书_果然!这10个Docker容器坑多数人都中招过
- 她,既是一个风华绝代的演员,更是WiFi之母...
- PHP+Mysql+jQuery实现发布微博程序(PHP篇)
- 后续:安装ORK功能包踩坑之路和解决方案
- 广数系统加工中心编程_CNC加工中心编程加工的一些小技巧,学会必有用
- mpu6050惯性导航学习记录
- Eat,PrayLove--结婚3周年
- win10网络适配器不见了_Win10网络适配器消失不见了怎么办?,爱纯净官网
- MySQL常见错误:Starting MySQL...The server quit without updating PID file (/usr/local/mysql/data/localhos
- 美股分时交易数据 API 接口
- 放弃Dubbo了,不太适合小系统
- opencv各lib库的功能
- css3实现字体从左到右渐变(原理与思路)
- 防火墙对FTP主动和被动模式的影响
- Day1学firefly学到python
- 小学信息技术用计算机画画说课,小学信息技术说课稿三篇
- 个人日记—《日俄战争》的故事—20200802
- Visual Geometry Group 资源(vgg)
热门文章
- linux主题文件,美化你的Linux!23个精美Ubuntu主题下载
- 如何生成java_如何生成JavaAPI doc
- 51单片机除法c语言,求一个 89C51 简易计算器的c语言程序 只要加减乘除就行!
- 根据title 关闭cmd 窗口_2种Win7关闭休眠功能方法
- (填坑:SQL打印两次)mybatisplus+p6spy 日志打印
- Linux之scp命令实现远程服务器的文件拷贝
- 多租户系统技术实现mysql_SaaS “可配置”和“多租户”架构的几种技术实现方式...
- oracle 查重复_日常答疑|MySQL删除重复数据踩过得坑
- git 创建新分支,合并分支等问题
- 解释上采样和PixelShuffle