Differences between revisions 1 and 4 (spanning 3 versions)
Revision 1 as of 2004-08-15 22:40:43
Size: 374
Editor: Zoom.Quiet
Comment:
Revision 4 as of 2004-09-14 06:59:16
Size: 4833
Editor: hoxide
Comment: otter2。0 实验,尝试服务端流量控制。
Deletions are marked like this. Additions are marked like this.
Line 8: Line 8:
= 文章大标 =
''简述''
== 章标题1 ==
= 目标 =
''生成框架中的uss*和usp*''
Line 12: Line 11:
=== 小节标题1 ===  * [http://wiki.woodpecker.org.cn/moin.cgi/Otter_2fOtterBase?action=AttachFile&do=get&target=OtterBase-040814 OtterBase-040814下载] --修改扩展为 rar, winrar 3.2以上版本!
== benchmarks框架结构 ==


=== uss ===

==== message ====

==== protocols ====


= otter 2.0 =
== ussd.py ==
 我暂时无法收发邮件,所以把对otter 2.0 的服务端流量控制的尝试发到wiki上讨论。
Line 15: Line 28:
Python code # -*- coding: utf-8 -*-
#
#
# $Id: ussd.py,v 1.8 2004/09/14 12:45:00 hoxide Exp $
"""$,1$U现了(BUSS德腄aemon程序
"""

from uss.message import usspmsg
from uss.protocols import ussp
from twisted.internet import reactor, protocol
from time import clock

import Queue
import thread

class USSServerProtocol(ussp.USSProtocol):
    """建立$,1){嘎?(BUSS服务器的协议处理"""
    """
    def __init__(self):
        ussp.USSProtocol.__init__(self)
    """
    funs={
            'connect': lambda self, m: self.p_ussp_connect(m),
            'mail_counter': lambda self, m: self.p_ussp_mail_counter(m),
            'terminate': lambda self, m: self.p_ussp_terminate(m)
            }
    def connectionMade(self):
        """建立连接?$,1%#?R舳疾蛔?(B"""
        print 'connectionMade'
        self.funs=USSServerProtocol.funs
    def on_ussp_connect(self, message):
        getqueue.put((self, 'connect', message))
    def on_ussp_mail_counter(self, message):
        getqueue.put((self, 'mail_counter', message))
    def on_ussp_terminate(self, message):
        getqueue.put((self, 'terminate', message))
        
    def p_ussp_connect(self, message):
        """处理?$,1&[Щ?(Bconnect报文"""
        smessage = usspmsg.USSPMessage()
        smessage.head.sequence = message.head.sequence
        smessage.setMsgName('connect_resp')
        smessage.body.setField('status',1)
        smessage.body.setField('version',1)
        self.sendData(smessage.packed())

    def p_ussp_mail_counter(self, message):
        """处理?$,1&[Щ⒗吹?(Bmail_counter报文"""
        smessage = usspmsg.USSPMessage()
        smessage.head.sequence = message.head.sequence
        smessage.setMsgName('mail_counter_resp')
        smessage.body.setField('uid',message.body.fields['uid'])
        smessage.body.setField('number',2028)
        self.sendData(smessage.packed())

    def p_ussp_terminate(self, message):
        """处理?$,1&[Щ?(Bterminate报文"""
        smessage = usspmsg.USSPMessage()
        smessage.head.sequence = message.head.sequence
        smessage.setMsgName('terminate_resp')
        self.sendData(smessage.packed())
        # 完事了!!!?$,1'?>的连接
(B self.transport.loseConnection()
    
    

class USSServerFactory(protocol.ServerFactory):
    """USS服务器工厂"""
    protocol = USSServerProtocol

import time
def processData(queue):
    while 1:
        """
        if queue.empty():
            print 'sleep 1 sec'
            time.sleep(1)
            continue
        """
        #print 'to get'
        m = queue.get(block=True)
        #print 'get'
        m[0].funs[m[1]](m[0], m[2])

getqueue = Queue.Queue(100)

#thread.start_new(processData, (getqueue,))
reactor.callInThread(processData, getqueue)

def main():
    f = USSServerFactory()
    reactor.listenTCP(7890, f)
    reactor.run()

if __name__ == "__main__":
    main()
 
  
Line 18: Line 128:
==== 次节标题1 ====
xxx
有点乱码,和我emacs的设置问题有关。
Line 21: Line 130:
== 章标题2 == == 测试 ==
Line 23: Line 132:
=== 小节标题2 === 客户端的WINMAX设到1000000,就几乎等于客户端没开窗口。
Line 25: Line 135:
其它
代码引用

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搪
Line 29: Line 173:
==== 次节标题2 ====
yyy
这个只是曲起点,我测了一下0xfff的情况,只有40多条每秒, 要考虑其他办法,比如服务器和发送者之间流量控制的配合

程序使用了线程。具体参见twisted的["PyTwisted_2fLowLevelNetworkingEventLoop_2fLLNEL9"]

Otter 目标代码框架!

-- Zoom.Quiet [DateTime(2004-08-15T22:40:43Z)] TableOfContents

目标

生成框架中的uss*和usp*

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 (B        self.transport.loseConnection()
  64     
  65     
  66 
  67 class USSServerFactory(protocol.ServerFactory):
  68     """USS服务器工厂"""
  69     protocol = USSServerProtocol
  70 
  71 import time
  72 def processData(queue):
  73     while 1:
  74         """
  75         if queue.empty():
  76             print 'sleep 1 sec'
  77             time.sleep(1)
  78             continue
  79         """
  80         #print 'to get'
  81         m = queue.get(block=True)
  82         #print 'get'
  83         m[0].funs[m[1]](m[0], m[2])
  84 
  85 getqueue = Queue.Queue(100)
  86 
  87 #thread.start_new(processData, (getqueue,))
  88 reactor.callInThread(processData, getqueue)
  89 
  90 def main():
  91     f = USSServerFactory()
  92     reactor.listenTCP(7890, f)
  93     reactor.run()
  94 
  95 if __name__ == "__main__":
  96     main()
  97  

有点乱码,和我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的["PyTwisted_2fLowLevelNetworkingEventLoop_2fLLNEL9"]

Otter/OtterBase (last edited 2009-12-25 07:15:28 by localhost)