eurasia 3 现在仍有在继续开发么?

217 views
Skip to first unread message

cosnis

unread,
Nov 16, 2011, 1:20:39 PM11/16/11
to eurasi...@googlegroups.com
rt


看代码部分貌似很久没有提交过了.....

沈崴

unread,
Nov 16, 2011, 7:23:29 PM11/16/11
to eurasia-users
是的,我们现在正在开发 3.2 版,预计会在 1 个月后发布。

On Nov 16, 6:20 pm, cosnis <cos...@gmail.com> wrote:
> rt
>
> 看代码部分貌似很久没有提交过了.....

老光

unread,
Nov 16, 2011, 8:28:46 PM11/16/11
to eurasi...@googlegroups.com
老大,3.2预计会有哪些内容,还是给个提示讪!
建议:
1.支持windows.python本身是跨平台的, stackless也完善支持windows,就线程而言,win和linux表现是一样的.
2.基于stackless而不是greenlet.stackless的开发几乎跟得上主python版本的节奏,而且稳定和功能强大,是真正的并发(相比..let)
3.提供数据库文件等IO操作时的线程异步解决方案.使用socket2有技术难度咯!
4.提供更多鲜活实用的demo,比如在线聊天室,rjf的使用,论坛,留言本等.
5.直接提供sessions支持,反正现在的浏览器基本支持cookie.
6.对eurasia项目的服务端文件夹结构作个建议.
还有的,再想想...
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的“eurasia-users”论坛。
> 要向此网上论坛发帖,请发送电子邮件至 eurasi...@googlegroups.com
> 要取消订阅此网上论坛,请发送电子邮件至 eurasia-user...@googlegroups.com
> 若有更多问题,请通过 http://groups.google.com/group/eurasia-users?hl=zh-CN 访问此网上论坛。
>
>

沈崴

unread,
Nov 16, 2011, 9:30:58 PM11/16/11
to eurasia-users
On Nov 17, 1:28 am, 老光 <yaoguangm...@cq.chinatelecom.com.cn> wrote:
> 老大,3.2预计会有哪些内容,还是给个提示讪!
> 建议:
> 1.支持windows.python本身是跨平台的, stackless也完善支持windows,就线程而言,win和linux表现是一样的.

因为架构差距比较大,只能尽量对 windows 提供支持。

但无论如何 eurasia 系列在 windows 上目前都只能用来做开发测试,不能用于生产环境。除非将来大家有空把 IOCP 支持加上。

> 2.基于stackless而不是greenlet.stackless的开发几乎跟得上主python版本的节奏,而且稳定和功能强大,是真正的并发(相比. .let)

看过代码,stackless 和 greenlet 实现大体一致,可以放心。此外 greenlet 部署方便,这很重要。

> 3.提供数据库文件等IO操作时的线程异步解决方案.使用socket2有技术难度咯!

3.2 最大的改动是加大了对数据库支持。

> 4.提供更多鲜活实用的demo,比如在线聊天室,rjf的使用,论坛,留言本等.

有时间的话 ;)

> 5.直接提供sessions支持,反正现在的浏览器基本支持cookie.

比较遗憾,3.1 中的 cookie 支持会在 3.2 中取消。3.2 的接口比 3.1 更少,许多功能都需要外置。

> 6.对eurasia项目的服务端文件夹结构作个建议.

嗯,这个没问题的。

> 还有的,再想想...

cosnis

unread,
Nov 17, 2011, 12:19:48 AM11/17/11
to eurasi...@googlegroups.com
嗯嗯~  还有继续开发就好了~~

另外想问一下 3.1 和 3.2 的区别会不会很大呢?

我现在自己用c++, 然后找了个网络层来实现了tcpserver的功能..

但是因为时半路出家的.. 所以server的性能上不太好...  总是会有异常延迟之类的现象...

因此想用 eurasia 来尝试下...  不知道能不能适合 高并发实时webgame  的场景

其实看介绍有说能支持的~   只是希望能再和大家聊一下~  ^_^   有童鞋在实际的webgame里面使用过么?

沈崴

unread,
Nov 17, 2011, 1:00:13 AM11/17/11
to eurasia-users

版本间接口会有一定变化,但大体一致。

eurasia 做长连接高并发应用比较容易,tcp / http 都可以,在某些 webgame 中的实时部分有实际应用。

但是 eurasia 对于数据库和磁盘 IO 支持比较差,我们在 3.2 版中着手改善。

cosnis

unread,
Nov 17, 2011, 2:07:45 AM11/17/11
to eurasi...@googlegroups.com
soga~ 那我还是期待下3.2再考虑弄到生产环境吧~~

另外 请问下沈大~   tcpserver 怎么样做并发性能测试呢?

沈崴

unread,
Nov 17, 2011, 7:48:46 PM11/17/11
to eurasia-users
eurasia 各个历史版本均在生产环境中投入使用,目前 3.1 应该是使用最多的版本。

同时我们目前有些项目已经从 3.1 过渡到 3.2,内测完毕后就会放出,约为一个月后。

tcpserver 性能测试最好是自己写对应的 socket 客户端。

最简单的是用 tcpserver 编写一个简单的 http server(但是不完成报文发送及关闭连接),可以用普通的 http 性能测试工具
来测试长连接并发能力。可以用到的工具是 ab、webbench、loadrunner 等,使用尽量多的测试机。

总体而言,要测试 eurasia 的性能是一件比较麻烦的事情,大体上不用太担心性能问题。

老光

unread,
Feb 20, 2013, 4:39:06 AM2/20/13
to eurasi...@googlegroups.com
沈大,看来3.2已经完全把windows放下了,我继续学习3.1。还是喜欢eurasia,因为其并发能力确是cherrypy无法比拟。
以下是我学写的一个组装函数,将阻塞的函数用线程执行,你看看有什么问题没有?目前测试了sleep,和简单的有返回值的函数,还没有发现问题。多线程中函数调用返回值确实是个难题,百度半天都没找到好的办法。
rpc2是否可进一步写成个匿名函数哦?
以及,是否我将所有模块中的阻塞函数,都用这个封装一遍还回去,原来的程序就不用改动了?
那,如何方便地得知哪些模块中的哪些函数是阻塞的?
希望沈大能继续支持3.1。
=============
def rpc(func):
'''对可能阻塞的函数,用线程包装运行,通过channel交换数据'''
def rpc2(chan,func, *k, **kw):
chan.send(func(*k, **kw))
#thread.exit()
#return

def wraper(*k, **kw):
chan = channel()
t1 = threading.Thread(target=rpc2, args=(chan, func)+k, kwargs=kw, name=str(func))
t1.deamon = True
t1.start()
return chan.receive()
return wraper
======
----- Original Message -----
From: "沈崴" <wile...@gmail.com>
To: "eurasia-users" <eurasi...@googlegroups.com>
Sent: Friday, November 18, 2011 8:48 AM
Subject: [eurasia-users] Re: eurasia 3 现在仍有在继续开发么?


沈崴

unread,
Feb 25, 2013, 8:43:50 PM2/25/13
to eurasi...@googlegroups.com, 老光
老光,你好。从你的代码看,应该用的是 eurasia 3.0 (只有 3.0 可以使用 channel)
在 3.0 中,线程池(包括如何获取函数返回值的方法)可以这样写:

class Pool:
    def __init__(self, n=16):
        self.queue = Queue()
        for i in xrange(n):
            start_new_thread(self.pipe, ())
    def __call__(self, func):
        def wrapper(*args, **kw):
            e = channel()
            self.queue.put((e, func, args, kw))
            errno, e = e.receive()
            if errno == 0:
                return e
            raise e
        return wrapper
    def pipe(self):
        while True:
            rst, func, args, kw = self.queue.get()
            try:
                result = func(*args, **kw)
            except BaseException, e:
                rst.send((-1, e))
            else:
                rst.send((0, result))

threading = Pool(32) # 32 个线程

# 可以这么用
#
# @threading
# def handler(httpfile):
# ...

参考: http://groups.google.com/group/eurasia-users/browse_thread/thread/0da189b6c9b9bf81

另外,3.1 和 3.2 一样,都不能支持 windows。所以新项目应使用 3.2 版本。

老光

unread,
Feb 26, 2013, 4:21:43 AM2/26/13
to eurasi...@googlegroups.com
还有一个奇怪的现象, 用ab测试eurasia时.就是wsgi处理函数里使用了我那个线程包装函数或老大这个线程包装函数时,用ab测试每秒钟能处理多少个请求,出现不能理解的结果:
ab -n 2000 http://localhost/  #根地址里没有运行线程包装过的函数 
Requests per second:    1185.19 [#/sec] (mean)
ab -n 2000 -c 10 http://localhost/
Requests per second:    1185.19 [#/sec] (mean)
甚至-c 300都没有影响响应数量.
 
ab -n 2000 http://localhost/test  #test地址对应处理函数调用了一个线程包装后的函数
Requests per second:    64.06 [#/sec] (mean)  #这里出问题了!!响应一下变得巨慢!但将测试实例增加到2后,就又一切正常,如下!
ab -n 2000 -c 2 http://localhost/test 
Requests per second:    1333.33 [#/sec] (mean)
 
----- Original Message -----
From: 沈崴
--
您收到此邮件是因为您订阅了 Google 网上论坛的“eurasia-users”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 eurasia-user...@googlegroups.com
要向此网上论坛发帖,请发送电子邮件至 eurasi...@googlegroups.com
通过以下网址访问此论坛:http://groups.google.com/group/eurasia-users?hl=zh-CN。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
 
 

老光

unread,
Feb 26, 2013, 3:06:30 AM2/26/13
to eurasi...@googlegroups.com
咦,谢谢了!好象这正是当时的文档中老大写的线程池的例子,我对threading = Pool(32)有印象.
 
----- Original Message -----
From: 沈崴
Cc: 老光
Sent: Tuesday, February 26, 2013 9:43 AM
--
您收到此邮件是因为您订阅了 Google 网上论坛的“eurasia-users”论坛。
Reply all
Reply to author
Forward
0 new messages