文档章节

twisted tcp 客户端重连

一一无念
 一一无念
发布于 2018/08/14 14:20
字数 347
阅读 62
收藏 0

在工业应用(物联网中)往往需要一些 tcp作为客户端去连接服务器,成功连接后对物联网设备进行操作,但是如果因为硬件的一些原因可能会出实现重新上电, 连接断开, 所以需要重连接的一些设备的服务器, 而python的twisted的对客户端重联设计的比较友好. 

from twisted.internet.protocol import Protocol
from twisted.internet import reactor
from twisted.internet.protocol import ReconnectingClientFactory
from apscheduler.schedulers.twisted import TwistedScheduler

conns = {}
 
class MyProtocol(Protocol):
	def __init__(self):
		self.id = 0
		self.ip = None


	def dataReceived(self, data):
		pass

	def connectionLost(self, reason):
		if self.id in conns:
			del conns[self.id]

	def connectionMade(self):
		print self.transport.getPeer().host
		self.ip = self.transport.getPeer().host
		self.id = 0
		conns[self.id] = self
 
class MyClientFactory(ReconnectingClientFactory):
	def startedConnecting(self, connector):
		print 'Started to connect.'

	def buildProtocol(self, addr):
		print 'Connected.'
		print 'Resetting reconnection delay'
		self.resetDelay()
		return MyProtocol()

	def clientConnectionLost(self, connector, reason):
		print 'Lost connection.  Reason:', reason
		ReconnectingClientFactory.clientConnectionLost(self, connector, reason)

	def clientConnectionFailed(self, connector, reason):
		print 'Connection failed. Reason:', reason
		ReconnectingClientFactory.clientConnectionFailed(self, connector,reason)

def sendcommand():
	for k, v in conns.iteritems():
		try:
			v.transport.write("AT+GPI=?\r\n")
		except Exception as e:
			print e.message


if __name__ == '__main__':
	
	reactor.connectTCP('127.0.0.1', 5000, MyClientFactory())
	reactor.connectTCP('127.0.0.1', 5000, MyClientFactory())
	scheduler = TwistedScheduler()
	scheduler.add_job(sendcommand, 'interval',seconds=3)
	scheduler.start()
	reactor.run()

© 著作权归作者所有

一一无念
粉丝 58
博文 36
码字总数 18408
作品 0
长沙
私信 提问
常用twisted的兄弟帮忙看下

我的运行环境如下 win7 64,python2.7.6 64,twisted 13.2 twisted一直无法正常启动,reactor install时就报错: cffi.ffiplatform.VerificationError: importing 'D:\\Python27\\lib\\site-pa......

askforone
2014/05/07
742
1
【twisted】python上实现TCP通讯

以下实验基于win10==1903、anaconda==2019.07、python==3.6、twisted==19.7.0 0.写在前面 不管是服务器端还是客户端,都是通过的来启动的,所以首先就需要导入包下的模块 从模块的源码中可以...

中年老俞
08/10
35
0
Python网络编程笔记

一、说明 使用套接字进行网络编程,需要先了解一些有关网络编程的背景信息。 1、客户端/服务器架构: 服务器为一个或多个客户端提供所需的服务,存在的目的就是等待客户端的请求,并响应它们,...

PeanutLike
2016/12/01
145
0
(转) Twisted :第二十部分 轮子中的轮子: Twisted和Erlang

简介 在这个系列中,有一个事实我们还没有介绍,即混合同步的"普通Python"代码与异步Twisted代码不是一个简单的任务,因为在Twisted程序中阻滞不定时间将使异步模型的优势丧失殆尽. 如果你是初次...

水果糖
2016/01/27
38
0
Python 网络编程操作TCP/UDP 初探(一)

服务器与客户端之间通信模式: 我觉得这个举例是很恰当的。将服务器->客服总线,客户端->客户,新的客户端->客服代表。 客服总线比如说400-xxxxxx这类的电话,一直处于等待状态,当有新的客户...

丰_申
2016/09/30
61
0

没有更多内容

加载失败,请刷新页面

加载更多

The server time zone value 'EDT' is unrecognized or represents more than one time zone.

2019-10-14 18:07:43.714 ERROR 74363 --- [Druid-ConnectionPool-Create-1855026648] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://10.30......

yizhichao
22分钟前
7
0
html加载顺序以及影响页面二次渲染额的因素

本文转载于:专业的前端网站➱html加载顺序以及影响页面二次渲染额的因素 浏览器请求发往服务器以后,返回HTML页面,页面内容开始渲染,具体的执行顺序为: 1. 浏览器开始载入html代码,发现<...

前端老手
24分钟前
7
0
BeginnersBook JSP、JSTL、Servlet 教程

来源:ApacheCN BeginnersBook 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并...

ApacheCN_飞龙
36分钟前
5
0
Handler和内部类的正确用法

PS:本文摘抄自《Android高级进阶》,仅供学习使用   Android代码中涉及线程间通信的地方经常会使用Handler,典型的代码结构如下。 1 2 3 4 5 6 7 8 9 public class HandlerActivity exten...

shzwork
36分钟前
7
0
centos 7 安装mysql5.6rpm格式

centos 7 安装mysql5.6rpm格式 1查看是否安装了mysql rpm -qa|grep -i mysql 如果安装了请卸载:rpm -e --nodeps MySQL... 2、没有安装则进行如下操作 下载mysql rpm tar包 https://dev.mysq...

Archer99
37分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部