benchmarks -- Zoom.Quiet [2004-08-09 23:57:27]
优化讨论
主要针对客户端
b%gnsq1--Benchmarks/gnsd|c 测试1
0729版本
1 # -*- coding: utf-8 -*-
2 #
3 #
4 # $Id: ussc.py,v 1.3 2004/07/28 10:23:34 hd Exp $
5
6 from uss.message import usspmsg
7 from uss.protocols import ussp
8 from twisted.internet import reactor, protocol, defer
9 from time import clock
10
11 class USSClientProtocol(ussp.USSProtocol):
12 def connectionMade(self):
13 message = usspmsg.USSPMessage()
14 message.setMsgName('connect')
15 message.body.setField('system_id','123456')
16 message.body.setField('auth_source','1234567890123456')
17 message.body.setField('version',0x0100)
18 message.body.setField('time_stamp','12345678')
19 self.sendData(message.packed())
20
21 def on_ussp_connect_resp(self, message):
22 print "Connect successfully"
23 global nownum
24 global count
25 # while (nownum < count):
26 defer.succeed(self.testserver(str(nownum)))
27 # nownum += 1
28 # if(nownum >= count)
29 # self.disconnect()
30
31 def on_ussp_terminate_resp(self, message):
32 # 完事了!!!断开丫的连接
33 self.transport.loseConnection()
34
35 def on_ussp_mail_counter_resp(self, message):
36 global getnum
37 global lastuid
38 global nownum
39 lastuid = message.body.fields['uid']
40 getnum += 1
41 if getnum >= count:
42 self.disconnect()
43 nownum += 1
44 defer.succeed(self.testserver(str(nownum)))
45
46 def testserver(self,uid):
47 message = usspmsg.USSPMessage()
48 message.setMsgName('mail_counter')
49 message.body.setField('uid',uid)
50 self.sendData(message.packed())
51
52 def disconnect(self):
53 message = usspmsg.USSPMessage()
54 message.setMsgName('terminate')
55 self.sendData(message.packed())
56
57 class USSClientFactory(protocol.ClientFactory):
58 protocol = USSClientProtocol
59
60 def clientConnectionFailed(self, connector, reason):
61 print "Connection failed - goodbye!"
62 reactor.stop()
63
64 def clientConnectionLost(self, connector, reason):
65 print "Connection lost"
66 reactor.stop()
67 pass
68
69 def main():
70 f = USSClientFactory()
71 global count
72 count = 0xffff
73 global nownum
74 nownum = 0
75 global lastuid
76 lastuid = ''
77 global getnum
78 getnum = 0
79 reactor.connectTCP("127.0.0.1", 7890, f)
80 start = clock()
81 reactor.run()
82 print "测试数据:%10d 条" %nownum
83 print "收到 %d 条" %getnum
84 print "最后收到uid为:%s" %lastuid
85 print "用时:%.2f 秒" %(clock()-start)
86 print "每秒: %.2f 条" %(getnum / (clock()-start))
87
88 if __name__ == "__main__":
89 main()
0731版本
1 # -*- coding: utf-8 -*-
2 #
3 #
4 # $Id: ussc.py,v 1.5 2004/07/29 08:02:06 hd Exp $
5
6 from uss.message import usspmsg
7 from uss.protocols import ussp
8 from twisted.internet import reactor, protocol, defer
9 from time import clock
10 import Queue
11
12 # 定义了滑动窗口的大小
13 WINMAX = 1024
14
15 class USSClientProtocol(ussp.USSClientQueueProtocol):
16 """建立一个USS客户机的协议处理"""
17 def connectionMade(self):
18 """连接成功后开始发送报文"""
19 # 先发一个connect报文进行握手
20 message = usspmsg.USSPMessage()
21 message.setMsgName('connect')
22 message.body.setField('system_id','123456')
23 message.body.setField('auth_source','1234567890123456')
24 message.body.setField('version',0x0100)
25 message.body.setField('time_stamp','12345678')
26 self.sendDataToQueue(message)
27 ussp.USSClientQueueProtocol.connectionMade(self)
28
29 def on_ussp_connect_resp(self, message):
30 """服务器返回了connect的resp报文"""
31 print "Connect successfully"
32 defer.succeed(self.testserver())
33
34 def on_ussp_terminate_resp(self, message):
35 # 完事了!!!断开丫的连接
36 self.transport.loseConnection()
37
38 def on_ussp_mail_counter_resp(self, message):
39 """服务器返回了mail_counter的resp报文"""
40 global getnum
41 global lastuid
42 lastuid = message.body.fields['uid']
43 getnum += 1
44
45 def testserver(self):
46 """向服务器发的测试报文"""
47
48 global nownum
49 global count
50
51 while nownum < count:
52 message = usspmsg.USSPMessage()
53 message.setMsgName('mail_counter')
54 message.body.setField('uid',str(nownum))
55 if self.factory.sendQueue.full():
56 self.call = reactor.callLater(0, self.testserver)
57 return
58 else:
59 self.factory.sendQueue.put_nowait(message)
60 nownum += 1
61
62 self.disconnect()
63
64 def disconnect(self):
65 """发完测试报文后发送terminate报文让服务器断开连接"""
66 message = usspmsg.USSPMessage()
67 message.setMsgName('terminate')
68 self.sendDataToQueue(message)
69
70 class USSClientFactory(protocol.ClientFactory):
71 protocol = USSClientProtocol
72
73 def __init__(self):
74 # 滑动窗口的大小
75 self.WINMAX = WINMAX
76 # 等待发送的报文队列
77 self.sendQueue = Queue.Queue(self.WINMAX)
78 # 已经发出的报文序列ID
79 self.sendMsg = []
80 # 使用的消息ID
81 self.sequence = 1
82
83 def clientConnectionFailed(self, connector, reason):
84 print "Connection failed - goodbye!"
85 reactor.stop()
86
87 def clientConnectionLost(self, connector, reason):
88 print "Connection lost"
89 reactor.stop()
90 pass
91
92 def main():
93 f = USSClientFactory()
94 global count
95 count = 0xffff
96 global nownum
97 nownum = 0
98 global lastuid
99 lastuid = ''
100 global getnum
101 getnum = 0
102 reactor.suggestThreadPoolSize(30)
103 reactor.connectTCP("192.168.2.237", 7890, f)
104 #reactor.connectTCP("127.0.0.1", 7890, f)
105 start = clock()
106 reactor.run()
107 print "测试数据:%10d 条" %nownum
108 print "收到 %d 条" %getnum
109 print "最后收到uid为:%s" %lastuid
110 print "用时:%.2f 秒" %(clock()-start)
111 print "每秒:%f条" %(nownum / (clock()-start))
112
113 if __name__ == "__main__":
114 main()
ussp.py
1 # -*- coding: utf-8 -*-
2 #
3 #
4 # $Id: ussp.py,v 1.2 2004/07/28 08:36:29 hd Exp $
5
6 """Open Unified Storage System Protocol
7
8 Stability: None
9
10 @author: U{HD<mailto:[email protected]>}
11
12 @see: Open Unified Storage System Protocol规范
13 """
14 from uss.protocols import byteprotocol
15 from uss.message import usspmsg
16 from twisted.internet import reactor
17
18 class USSProtocol(byteprotocol.ByteMessageProtocol):
19 """缺省USS协议实现"""
20 def MessageReceived(self,packet):
21 """接收到一条消息,对该消息进行处理"""
22 message = usspmsg.USSPMessage()
23 message.loadMessage(packet)
24 # print message
25 self.MessageProcess(message)
26
27 def MessageProcess(self, message):
28 """调用指定的方法来处理收到的消息"""
29 method = getattr(self , "on_ussp_%s" % message.msgname, None)
30 return method(message)
31
32 class USSClientQueueProtocol(USSProtocol):
33 """使用滑动窗口队列的USS协议客户端实现"""
34
35 def MessageReceived(self,packet):
36 """接收到一条消息,确定该消息是否是已发送出的消息,
37 如果是,从发送消息队列中清除该消息。然后按正常的流程执行下去。
38 """
39 message = usspmsg.USSPMessage()
40 message.loadMessage(packet)
41 # print message
42 # 将发出的消息从队列中清楚
43 self.factory.sendMsg.remove(message.head.sequence)
44 self.MessageProcess(message)
45
46 def connectionMade(self):
47 """连接成功了,就可以启动发送线程了"""
48 reactor.callInThread(self.sendQueueMesg)
49
50 def sendDataToQueue(self, message):
51 """将消息加入待发送队列"""
52 if(not self.factory.sendQueue.full()):
53 self.factory.sendQueue.put(message)
54 else:
55 self.call = reactor.callLater(0, self.sendDataToQueue, message)
56
57 def sendQueueMesg(self):
58 """将队列中的消息发送出去"""
59 if (len(self.factory.sendMsg) < self.factory.WINMAX):
60 while (not self.factory.sendQueue.empty()):
61 message = self.factory.sendQueue.get()
62 # 发送前设置消息的顺序号
63 message.head.sequence = self.factory.sequence
64 self.sendData(message.packed())
65 # 将已经发送的消息放入已经发送的清单中
66 self.factory.sendMsg.append(self.factory.sequence)
67 self.factory.sequence += 1
68 self.call = reactor.callLater(0, self.sendQueueMesg)