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

我正在尝试使用websockets包在Python上构建一个websockets客户端:Websockets 4.0 API

我使用这种方式而不是示例代码,因为我想创建一个websocket客户机类对象,并将其用作网关。在

我在客户端的侦听器方法(receiveMessage)有问题,这会在执行时引发ConnectionClose异常。我想也许这个循环有什么问题。在

这是我尝试构建的简单webSocket客户端:import websockets

class WebSocketClient():

def __init__(self):

pass

async def connect(self):

'''

Connecting to webSocket server

websockets.client.connect returns a WebSocketClientProtocol, which is used to send and receive messages

'''

self.connection = await websockets.client.connect('ws://127.0.0.1:8765')

if self.connection.open:

print('Connection stablished. Client correcly connected')

# Send greeting

await self.sendMessage('Hey server, this is webSocket client')

# Enable listener

await self.receiveMessage()

async def sendMessage(self, message):

'''

Sending message to webSocket server

'''

await self.connection.send(message)

async def receiveMessage(self):

'''

Receiving all server messages and handling them

'''

while True:

message = await self.connection.recv()

print('Received message from server: ' + str(message))

这是主要的:

^{pr2}$

为了测试传入消息侦听器,服务器在建立连接时向客户端发送两条消息。在

客户端正确连接到服务器,并发送问候语。然而,当客户机接收到这两条消息时,它会引发一个ConnectionClosed异常,代码为1000(没有原因)。在

如果删除receiveMessage客户机方法中的循环,则客户机不会引发任何异常,但它只接收一条消息,所以我想我需要一个循环来保持侦听器的活动,但我不知道确切的位置和方式。在

有什么解决办法吗?在

提前谢谢。在

编辑:我意识到,当客户端从服务器接收到所有挂起的消息时,它会关闭连接(并中断循环)。不过,我希望客户能继续收听未来的消息。在

此外,我还尝试添加另一个函数,其任务是向服务器发送“heartbeat”,但客户端还是关闭了连接。在

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

upc 9519 New Game

New Game 时间限制: 1 Sec 内存限制: 128 MB Special Judge提交: 157 解决: 53[提交] [状态] [讨论版] [命题人:admin]题目描述 Eagle Jump公司正在开发一款新的游戏。泷本一二三作为其员工,获得了提前试玩的机会。现在她正在试图通过一个迷宫。这个迷宫有一些特…

java学习(21):移位运算符

//移位运算符 public class test{ public static void main(String[] args){ int num3; //向左移位 System.out.println(“移位之前的二进制为”Integer.toBinaryString(num)); int moveleftnum<<2; System.out.println(“移位之后的值为”moveleft); //向右移位 int num…

Datagridview绘制

#region 绘制private void dataGridView_main_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e){int status_column_index 14;//会诊状态所在列DataGridViewRow row dataGridView_main.Rows[e.RowIndex];//获取行DataGridViewCell cell row.Cells[15];//按钮…

java学习(22):if语句

/任务 1&#xff1a;if语句 编写控制台java程序&#xff0c;使用Scanner 对象相关方法从控制台接收用户输入学生年龄&#xff0c; 如果输入的年龄大于18&#xff0c;则输出“你是一个成年人了&#xff0c;该有担当了&#xff01;/ import java.util.Scanner; public class test…

ansible管理mysql安装初始化_[ansible]-ansible初始化mysql数据库

0.目录结构$ tree mysqlmysql├── files│ └── web.sql├── handlers│ └── main.yml├── tasks│ └── main.yml├── templates│ ├── client.cnf.j2│ ├── my.cnf.j2│ ├── mysql-clients.cnf.j2│ └── server.cnf.j2└── vars1…

利用expect实现自动化操作

管理机上需要安装expect包 yum -y install expect1.定义主机ip[rootlocalhost ~]# cat ip.txt 192.168.1.12 192.168.1.132.定义脚本内容[rootlocalhost ~]# cat script.sh vmstat3、shell嵌套expect脚本[rootlocalhost ~]# cat command.sh #!/bin/bashpasswd12345678 sc$(ca…

java学习(23):if..else

/任务2&#xff1a;if else 语句 编写控制台java程序&#xff0c;模拟银行取款的功能。 使用Scanner对象相关方法从控制台接收用户输入的银行卡账号和密码&#xff0c; 与预先定义好的银行卡账号密码相同则输出用户名密码正确&#xff0c;可以取款&#xff1b;如果账号或者密码…

word导入mysql表格_数据插入Word 表格步骤

数据插入Word 表格步骤数据插入Word 表格步骤(1)单击【数据库】工具栏上的【插入数据库】按钮&#xff0c;出现【数 据库】对话框&#xff0c;如图4-33 所示。(2)单击【获取数据】按钮&#xff0c;弹出【选择数据源】对话框&#xff0c;类 似于打开文档窗口。(3)选定合适的.数据…

android 面试汇总二

AnimationQ&#xff1a;Android中有哪几种类型的动画&#xff1f; 技术点&#xff1a;动画类型参考回答&#xff1a; 常见三类动画 View动画&#xff08;View Animation&#xff09;/补间动画&#xff08;Tween animation&#xff09;&#xff1a;对View进行平移、缩放、旋转和…

java学习(24):if..else...if

/任务3&#xff1a;if… else if…. else if….else语句 编写控制台java程序&#xff0c;模拟根据有多少钱买车的功能。 使用Scanner对象相关方法从控制台接收用户输入有多少钱&#xff0c; 单位为万。如果输入的钱数量大于等于100万&#xff0c;则输出“可以买奔驰” &#xf…

废粉盒在哪里_很想知道打印机废粉盒中的那些废碳粉应该怎么处理?

激光打印机用磁性调色剂(碳粉)的主要成分&#xff1a;F-Fe3O4晶体粉粒(PLGMENT)&#xff1a;占20-30%聚丙烯酸脂-苯乙烯共聚物&#xff1a;占50-60%电荷调节剂CCA&#xff1a;占10-20%流动化剂SiO2等表面改性剂聚乙烯/聚丙烯石蜡二、碳粉的无毒性控制碳粉的各种原材料若是标准化…

java学习(25):三目运算符

/任务4&#xff1a;三目运算符 编写控制台java程序&#xff0c; 使用Scanner对象相关方法从控制台接收两个整数&#xff0c;比较他们的大小/ import java.util.Scanner; public class test04{ public static void main(String[] args){ Scanner in new Scanner(System.in); Sys…

前端必须懂的计算机网络知识—(跨域、代理、本地存储)(掘金)

1.同源策略与跨域&#xff1a;浏览器只对网络请求有同源限制&#xff0c;同源就是协议、域名和端口号一致&#xff0c;不同源的客户端脚本在没有明确授权的情况下&#xff0c;不能读写对方XHR资源&#xff0c;反之不同源脚本读取对方XHR资源就是跨域。 转载于:https://www.cnbl…

程序安装mysql数据库_安装Mysql数据库

1.安装Mysql数据库①下载Mysql数据包wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz②在/usr/local/src下解压缩文件包tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz③将解压后的文件包改名为mysqlmv mysql-5.6.35-linux-gli…

java学习(26):switch

/扩展练习&#xff1a; 任务5&#xff1a;switch语句 编写控制台Java程序&#xff0c;使用Scanner对象相关方法接收用户输入的年份和月份&#xff0c; 输出这个月有多少天。(提示:闰年计算方法为&#xff1a;能被4整除单不能被100整除&#xff1b;或者能被400整除就是闰年。)/ …

自制操作系统Antz -- 系列文章

自制操作系统Antz day10——实现shell(上)AntzUhl 2018-10-10 16:25 阅读:192 评论:0Linux内核源码分析 day01——内存寻址AntzUhl 2018-08-05 13:38 阅读:111 评论:0后端必备的Linux知识AntzUhl 2018-08-05 09:45 阅读:190 评论:0自制操作系统Antz day09——实现内核 (下) 实现…

python输入一个字符一个数字_Python:如何只对字符串中的数字字符加/减一个数字?...

尽管注释中不鼓励使用regex&#xff0c;但可以使用regex将时间对象解析为datetime.time对象&#xff0c;对它们执行必要的计算&#xff0c;然后以所需格式打印它们&#xff1a;# datetime module for time calculationsimport datetime# regex moduleimport re# seconds to add…

java学习(27):巩固练习

/1 使用Eclipse编写控制台应用程, 使用while循环在控制台打印10行10列的如下图形 □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ …

PHP中路径怎么用?

PHP中路径怎么用&#xff1f; 在HTML一般使用网络路径&#xff1a; 例如&#xff1a;http://local.icframe.com/App/Home/Controller/IndexController.class.php 在PHP一般使用本地路径&#xff1a; 例如&#xff1a;D:ICFrame/App/Home/Controller/IndexController.class.php …

templatefield 动态_GridView动态创建templateField | 学步园

今天有些时间&#xff0c;把用cs代码添加编辑列及动态添加编辑模板作了整理。动态添加编辑列比较简单&#xff0c;即TemplateField tfnew TemplateField(),但难得是 往编辑列里动态添加编辑模版项 ItemTemplate。那天上网找了好多资料&#xff0c;才找到解决方法。先创建一个类…