Otter 目标代码框架!
-- Zoom.Quiet [2004-08-15 22:40:43]
目标
生成框架中的uss*和usp*
OtterBase-040814下载 --修改扩展为 rar, winrar 3.2以上版本!
benchmarks框架结构
uss
message
protocols
otter 2.0
ussd.py
- 我暂时无法收发邮件,所以把对otter 2.0 的服务端流量控制的尝试发到wiki上讨论。
1 # -*- coding: utf-8 -*-
2 #
3 #
4 # $Id: ussd.py,v 1.8 2004/09/14 12:45:00 hoxide Exp $
5 """$,1$U现了(BUSS德腄aemon程序
6 """
7
8 from uss.message import usspmsg
9 from uss.protocols import ussp
10 from twisted.internet import reactor, protocol
11 from time import clock
12
13 import Queue
14 import thread
15
16 class USSServerProtocol(ussp.USSProtocol):
17 """建立$,1){嘎?(BUSS服务器的协议处理"""
18 """
19 def __init__(self):
20 ussp.USSProtocol.__init__(self)
21 """
22 funs={
23 'connect': lambda self, m: self.p_ussp_connect(m),
24 'mail_counter': lambda self, m: self.p_ussp_mail_counter(m),
25 'terminate': lambda self, m: self.p_ussp_terminate(m)
26 }
27 def connectionMade(self):
28 """建立连接?$,1%#?R舳疾蛔?(B"""
29 print 'connectionMade'
30 self.funs=USSServerProtocol.funs
31 def on_ussp_connect(self, message):
32 getqueue.put((self, 'connect', message))
33 def on_ussp_mail_counter(self, message):
34 getqueue.put((self, 'mail_counter', message))
35 def on_ussp_terminate(self, message):
36 getqueue.put((self, 'terminate', message))
37
38 def p_ussp_connect(self, message):
39 """处理?$,1&[Щ?(Bconnect报文"""
40 smessage = usspmsg.USSPMessage()
41 smessage.head.sequence = message.head.sequence
42 smessage.setMsgName('connect_resp')
43 smessage.body.setField('status',1)
44 smessage.body.setField('version',1)
45 self.sendData(smessage.packed())
46
47 def p_ussp_mail_counter(self, message):
48 """处理?$,1&[Щ⒗吹?(Bmail_counter报文"""
49 smessage = usspmsg.USSPMessage()
50 smessage.head.sequence = message.head.sequence
51 smessage.setMsgName('mail_counter_resp')
52 smessage.body.setField('uid',message.body.fields['uid'])
53 smessage.body.setField('number',2028)
54 self.sendData(smessage.packed())
55
56 def p_ussp_terminate(self, message):
57 """处理?$,1&[Щ?(Bterminate报文"""
58 smessage = usspmsg.USSPMessage()
59 smessage.head.sequence = message.head.sequence
60 smessage.setMsgName('terminate_resp')
61 self.sendData(smessage.packed())
62 # 完事了!!!?$,1'?>的连接
63 self.transport.loseConnection()
64
65 class USSServerFactory(protocol.ServerFactory):
66 """USS服务器工厂"""
67 protocol = USSServerProtocol
68
69 import time
70 def processData(queue):
71 while 1:
72 """
73 if queue.empty():
74 print 'sleep 1 sec'
75 time.sleep(1)
76 continue
77 """
78 #print 'to get'
79 m = queue.get(block=True)
80 #print 'get'
81 m[0].funs[m[1]](m[0], m[2])
82
83 getqueue = Queue.Queue(100)
84
85 #thread.start_new(processData, (getqueue,))
86 reactor.callInThread(processData, getqueue)
87
88 def main():
89 f = USSServerFactory()
90 reactor.listenTCP(7890, f)
91 reactor.run()
92
93 if __name__ == "__main__":
94 main()
95
有点乱码,和我emacs的设置问题有关。
测试
客户端的WINMAX设到1000000,就几乎等于客户端没开窗口。
H:\OpenGNS\BENCHM~1>ussc.py Connect successfully Connection lost 测试数据: 4095 搪 收到 4095 搪 最后收德絬id为B?094 勇檬保潞2.14 寐 每秒:1917.559960搪 H:\OpenGNS\BENCHM~1>ussc.py Connect successfully Connection lost 测试数据: 4095 搪 收到 4095 搪 最后收德絬id为B?094 勇檬保潞2.54 寐 每秒:1611.171839搪 H:\OpenGNS\BENCHM~1>ussc.py Connect successfully Connection lost 测试数据: 8191 搪 收到 8191 搪 最后收德絬id为B?190 勇檬保潞5.05 寐 每秒:1621.519510搪 H:\OpenGNS\BENCHM~1>ussc.py Connect successfully Connection lost 测试数据: 16383 搪 收到 16383 搪 最后收德絬id为B?6382 勇檬保潞13.89 寐 每秒:1179.812285搪
这个只是曲起点,我测了一下0xfff的情况,只有40多条每秒, 要考虑其他办法,比如服务器和发送者之间流量控制的配合
程序使用了线程。具体参见twisted的http://wiki.woodpecker.org.cn/moin.cgi/PyTwisted_2fLowLevelNetworkingEventLoop_2fLLNEL9