使用Twisted进行socket编程
来源:互联网 发布:推荐好玩网络和页游 编辑:程序博客网 时间:2024/04/26 21:51
Twisted使用了更多的基于事件的方式。要写一个基本的服务器,你要实现事件处理器,它处理诸如一个新的客户端连接、新的数据到达和客户端连接中断等情况。在Twisted中,你的事件处理器定义在一个protocol中;你也需要一个factory,当一个新的连接到达时它能够构造这个protocol对象,但是如果你仅仅想创建一个自定义的Protocol类的实例的话,你可以使用来自Twisted的factory,Factory类在模块twisted.internet.protocol中。当你写你的protocol时,使用twisted.internet.protocol模块中的Protocol作为你的父类。当你得到一个连接时,事件处理器connectionMade被调用;当你丢失了一个连接时,connectionLost被调用。从客户端接受数据使用处理器dataReceived。但是你不能使用事件处理策略向客户端发送数据;要向客户端发送数据,你可以使用self.transport,它有一个write方法。它也有一个client属性,其中包含了客户端的地址(主机名和端口)。
下面这个例子是一个Twisted版的服务器。其中实例化了Factory并设置了它的protocol属性以便它知道使用哪个protocol与客户端通信(这就是所谓的你的自定义protocol)。然后你使用factory开始监听指定的端口,factory通过实例化的protocol对象处理连接。监听使用reactor模块中的listenTCP函数。最后,你通过调用reactor模块中的run函数来开始服务器。
from twisted.internet import reactor
from twisted.internet.protocol import Protocol, Factory
# 定义你Protocol类
class SimpleLogger(Protocol):
def connectionMade(self):
print 'Got connection from', self.transport.client
def connectionLost(self, reason):
print self.transport.client, 'disconnected'
def dataReceived(self, data):
print data
# 实例化Factory
factory = Factory()
# 设置factory的protocol属性以便它知道使用哪个protocol与客户端通信(这就是所谓的你的自定义
# protocol)
factory.protocol = SimpleLogger
# 监听指定的端口
reactor.listenTCP(1234, factory)
# 开始运行主程序
reactor.run()
为你的处理目的而写一个自定义的protocol是很容易的。模块twisted.protocols.basic中包含了几个有用的已存在的protocol,其中的LineReceiver执行dataReceived并在接受到了一个完整的行时调用事件处理器lineReceived。如果当你在接受数据时除了使用lineReceived,还要做些别的,那么你可以使用LineReceiver定义的名为rawDataReceived事件处理器。下面是一使用LineReceiver的服务器例子:
from twisted.internet import reactor
from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
class SimpleLogger(LineReceiver):
def connectionMade(self):
print 'Got connection from', self.transport.client
def connectionLost(self, reason):
print self.transport.client, 'disconnected'
def lineReceived(self, line):
print line
factory = Factory()
factory.protocol = SimpleLogger
reactor.listenTCP(1234, factory)
reactor.run()
参考来自:
http://acen-chen.javaeye.com/blog/290179
http://twistedmatrix.com/projects/core/documentation/howto/clients.html
- 使用Twisted进行socket编程
- 使用Twisted进行socket编程
- 使用Twisted替换asyncore进行socket编程
- [转]使用 Twisted Matrix 框架来进行网络编程
- 使用 Twisted Matrix 框架来进行网络编程
- [转]使用 Twisted Matrix 框架来进行网络编程 .
- 使用 Python 进行 socket 编程
- 使用python进行socket编程
- 使用python进行socket编程
- 使用Python进行socket编程
- 使用Python 进行socket编程
- 使用 Twisted Matrix 框架来进行网络编程,第 1 部分
- twisted03 使用twisted.web.client进行下载
- 使用SOCKET API进行编程的经验
- 使用C语言进行socket 多线程编程
- 使用开源代码IOS进行SOcket编程
- 使用开源代码Asyncsocket进行socket编程
- 使用libevent进行多线程socket编程demo
- FC 10下安装mysql
- CHttpFile实现Get/Post
- Linux的那些事儿(1)----Linux和UNIX以及和Windows的区别
- 非专业心里测试
- C#格式化数值结果表
- 使用Twisted进行socket编程
- delphi 内存流 操作
- 程序员
- Python来完成简单图像处理任务
- delphi 制作资源文件
- wince6.0 下的流驱动开发范例
- 错位的悲伤
- 周期性位置更新
- WinCE OAL架构分析