我正在使用python 2.6.1在Mac OS X 10.5盒子上测试cogen.我有一个简单的echo服务器和客户端泵,可以创建10,000个客户端连接作为测试.1000,5000等都工作得很好.但是,在大约10,000个连接处,服务器开始丢弃随机客户端 - 客户端看到"通过对等方重置连接".
我在这里缺少一些基本的网络背景知识吗?
请注意,我的系统配置为处理打开的文件(launchctl limit,sysctl(maxfiles等),ulimit -n都是有效的;在那里,完成了).此外,我已经证实cogen正在选择使用kqueue.
如果我给client-connect()调用添加一点延迟,一切都很好.因此,我的问题是,当短时间内连接频率很高时,为什么服务器会在压力下降其他客户端?有没有人遇到过这个?
为了完整起见,这是我的代码.
这是服务器:
# echoserver.py
from cogen.core import sockets, schedulers, proactors
from cogen.core.coroutines import coroutine
import sys, socket
port = 1200
@coroutine
def server():
srv = sockets.Socket()
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
addr = ('0.0.0.0', port)
srv.bind(addr)
srv.listen(64)
print "Listening on", addr
while 1:
conn, addr = yield srv.accept()
m.add(handler, args=(conn, addr))
client_count = 0
@coroutine
def handler(sock, addr):
global client_count
client_count += 1
print "SERVER: [connect] clients=%d" % …Run Code Online (Sandbox Code Playgroud) 好吧,我已经完成了一项任务,基本上可以找出内存分配如何适用于我将使用的任何语言.经过一些研究,我有一些问题和怀疑,我希望得到一些见解.例如:
我在这里读到Java确切地指定了堆栈内容的组织方式.查看JVM规范结构,它基本上表示堆栈包含框架,并且框架通过正确分配变量和函数来包含类中的内容.也许我在这里遗漏了一些东西,但我不明白这与C++的作用有何不同.我问,因为第一个链接说Java的堆栈内容规范避免了编译器的不兼容性.
此外,我还没有找到内存段是如何精确组织在一起的.例如,我知道内存分为全局变量,调用堆栈,堆和C++代码,但我不知道堆的地址是否高于堆栈,或者是否取决于实现.我也想知道Java程序是否具有更多,以及它是如何布局的.我想有一个标准,因为JVM必须知道它在哪里使用它,虽然我想它可以只有指针并将其余部分留给操作系统.我想,至少必须有一个事实上的标准.
另一个我不理解的是运行时常量池.它应该是"类文件中的constant_pool表的每类或每接口运行时表示",但我不认为我理解它的作用.它似乎有一个标签来表明有问题的结构是什么类型的?然后是结构的名称(由程序员给出或由底层系统分配?)然后看起来它的其余部分随着标签所描述的不同而变化(线程,数组等).
如果我对运行时常量池的解释是正确的,那么为什么它们和堆栈帧一样必要?是因为堆栈帧只处理堆栈段,运行时常量池还必须有堆分配内存的指针吗?
我在我的<script>标签中使用以下内容作为jQuery链接:
http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
Run Code Online (Sandbox Code Playgroud)
是否有"最新"版本的链接?像下面这样的东西(不起作用):
http://ajax.googleapis.com/ajax/libs/jquery/latest/jquery.js
Run Code Online (Sandbox Code Playgroud)
(显然不一定是将代码链接到可能更改的库但在开发中有用的好计划.)
编译器错误CS0283表示只能将基本POD类型(以及字符串,枚举和空引用)声明为const.有没有人有关于这种限制的理由的理论?例如,能够声明其他类型的const值(例如IntPtr)会很好.
我相信这个概念const实际上是C#中的语法糖,它只是用文字值替换了名称的任何用法.例如,给定以下声明,在编译时对Foo的任何引用都将替换为"foo".
const string Foo = "foo";
Run Code Online (Sandbox Code Playgroud)
这将排除任何可变类型,因此他们可能选择此限制而不必在编译时确定给定类型是否可变?
有没有人知道某个站点或页面,或者知道HTTPModule事件执行的HTTPApplication类事件的执行顺序?
我找到了所有事件的MSDN文档,但它没有显示进程步骤列表,但我找不到.
我的问题是如何立即处理输入而不是等待换行的对立面.我想继续阅读不断增长的日志文件,但在文件没有增长指定的秒数后停止.
我在CPAN上找到了Sys :: AlarmCall,并尝试如下所示,但是当我运行时它没有超时:
perl progress.tracker.pl progress.tracker.pl
Run Code Online (Sandbox Code Playgroud)
我猜这与与' <>'运算符相关的自动魔术有关.但我不确定如何重写代码.我没有明确打开一个文件(而不是任意数量的文件),如果没有指定文件则默认为标准输入 - 我只希望将它与一个文件名一起使用.
(该脚本为每行读取生成一个点,每读取50行生成一个换行符,每25行点输出一个时间戳.我用它来跟踪长时间运行的构建的进度.当前的化身是由tail -f,但是这个脚本没有退出,主要是因为它永远不会再获得任何输入来写入现在不存在的进度跟踪器.'last'行东西是我正常处理的日志文件中的标记;我想删除它.超时时间为分钟,而不是亚秒.)
#!/usr/perl/v5.10.0/bin/perl -w
#
# @(#)$Id: progress.tracker.pl,v 1.3 2009/01/09 17:32:45 jleffler Exp jleffler $
#
# Track progress of a log-generating process by printing one dot per line read.
use strict;
use constant DOTS_PER_LINE => 50;
use constant LINES_PER_BREAK => 25;
use constant debug => 0;
use POSIX qw( strftime );
use Sys::AlarmCall;
sub read_line
{
print "-->> read_line()\n" if debug; …Run Code Online (Sandbox Code Playgroud) 更新此问题以前标题为" 给我一个简单的信号(声音)模式检测算法的名称 "
你能否指点一些其他的方法,或试着说服我,我目前的方法仍然是一个好主意或神经网络可能是一种可行的方式?
更新我已经有2个好的答案,但另一个会受到欢迎,甚至奖励.
algorithm audio pattern-recognition signal-processing pattern-matching
为什么我应该使用像CouchDB这样的基于文档的数据库而不是使用关系数据库.是否存在基于文档的数据库比关系数据库更适合的典型应用程序或域?
我正在使用substring和IndexOf来定位字符串中的值,但如果下面的字符串(strOldValue)包含不同情况下的任何字符串,则我的代码不起作用.因此,如果strOldValue包含Test或TEST,那么我的子串会失败.如何在这种情况下添加ToUpper?原谅我的无知我是.Net的新手.
String strValue = strOldValue.Substring(strOldValue.IndexOf(@"test"));
Run Code Online (Sandbox Code Playgroud)
谢谢C.