我接受TCP连接的服务器有一个奇怪的问题.即使通常有一些进程在等待,但在某些连接数量下它会挂起.
长版:
服务器是用Perl编写的,并$srv使用重用标志绑定套接字并监听== 5.然后,它将循环分配到10个进程中.$clt=$srv->accept(); do_processing($clt); $clt->shutdown(2);
用C语言编写的客户端也很简单 - 它发送一些行,然后接收所有可用的行,并且执行shutdown(sockfd, 2);没有任何异步,最后发送和接收队列都是空的(如报告所示netstat).
连接仅持续约20ms.所有客户端的行为方式相同,实现方式相同,等等.现在假设我接受X来自客户端1的连接和X来自客户端2的连接.进程仍然报告它们一直处于空闲状态.如果我X从客户端3 添加另一个连接,突然服务器进程在接受后立即开始挂起.他们之后做的第一个阻塞accept();是while (<$clt>) ...- 但他们没有获得任何数据(在第一次尝试时已经).突然间,所有10个进程都处于此状态,并且不会停止等待.在strace,服务器进程似乎挂起read(),这是有道理的.
TIME_WAIT属于该服务器的状态中存在大量连接(问题开始显示时为~100),但这可能是一个红色的鲱鱼.
这可能发生什么?
经过一些更多的分析:结果发现客户端有问题,在尝试下一个连接之前没有正确关闭先前的连接.负载平衡列表开头的服务器是旧的连接.
我正在尝试将本地数据库(L)上的100,000条记录与远程数据库(R)上的100,000条记录进行比较.
基本上我想知道L中的元素是否存在于R中.为了确定这一点,我必须针对每个L对R做出请求,这需要很长时间(我知道,应该有更好的方法,没有' t,这是我得到的API).
因此,我想测试L对R的一小部分样本,然后以一定程度的信心推断整个R中存在多少个样本.我必须测试多少才能获得99%的置信水平?
好吧,我的一个项目中有一些相当奇怪的行为,我希望有人可以告诉我原因.我的文件结构如下所示:
MainApp.py
res/
__init__.py
elements/
__init__.py
MainFrame.py
Run Code Online (Sandbox Code Playgroud)
在MainFrame.py中,我定义了一个名为RPMWindow的类,它扩展了wx.Frame.
在MainApp.py中,这有效:
from res.elements.MainFrame import *
Run Code Online (Sandbox Code Playgroud)
而这不是:
from res.elements.MainFrame import RPMWindow
Run Code Online (Sandbox Code Playgroud)
我意识到外卡导入不会伤害任何东西,但我更感兴趣的是理解为什么命名导入在外卡成功时失败.
使用类名时,我得到了这个回溯:
Traceback (most recent call last):
File "C:\myApps\eclipse\plugins\org.python.pydev.debug_1.5.6.2010033101\pysrc\pydevd.py", line 953, in <module>
debugger.run(setup['file'], None, None)
File "C:\myApps\eclipse\plugins\org.python.pydev.debug_1.5.6.2010033101\pysrc\pydevd.py", line 780, in run
execfile(file, globals, locals) #execute the script
File "C:\Documents and Settings\Daniel\workspace\RPM UI - V2\src\MainApp.py", line 2, in <module>
from res.elements.MainFrame import RPMWindow
File "C:\Documents and Settings\Daniel\workspace\RPM UI - V2\src\res\elements\MainFrame.py", line 2, in <module>
from res.elements.MenuBar import MenuBarBuilder
File "C:\Documents and Settings\Daniel\workspace\RPM …Run Code Online (Sandbox Code Playgroud) 我们有这个JAXB注释:
@XmlElement(name = "Strategy", required = true)
protected List<Strategy> strategy;
Run Code Online (Sandbox Code Playgroud)
如果没有Strategy元素存在,则不会抛出任何异常..为什么会这样?我们不应该得到例外吗?
我的班级有一个事件:
public class WindowModel
{
public delegate void WindowChangedHandler(object source, WindowTypeEventArgs e);
public event WindowChangedHandler WindowChanged;
public void GotoWindow(WindowType windowType)
{
this.currentWindow = windowType;
this.WindowChanged.Invoke(this, new WindowTypeEventArgs(windowType));
}
}
Run Code Online (Sandbox Code Playgroud)
派生事件类:
public class WindowTypeEventArgs : EventArgs
{
public readonly WindowType windowType;
public WindowTypeEventArgs(WindowType windowType)
{
this.windowType = windowType;
}
}
Run Code Online (Sandbox Code Playgroud)
其他一些将它注册到事件的类:
private void SetupEvents()
{
this.WindowModel.WindowChanged += this.ChangeWindow;
}
private void ChangeWindow(object sender, WindowTypeEventArgs e)
{
//change window
}
Run Code Online (Sandbox Code Playgroud)
我从遵循.Net惯例中获得了什么?签订这样的合同会更有意义
public delegate void WindowChangedHandler(WindowType windowType);
public event WindowChangedHandler WindowChanged;
Run Code Online (Sandbox Code Playgroud)
这样做,我不需要创建一个新类,更容易理解.我不是在编写.Net库.此代码仅用于此项目.我喜欢惯例,但是当我说在这个例子中它没有意义或者我没有理解某些东西时,我是对的吗?
我在我的朋友iPod Touch第三代上安装了iPhone OS 4.0,忘了将udid添加到配置门户.设备被锁定,我似乎无法找到恢复它以获取UDID的方法.我这里没有XCode.使用iTunes,我该如何还原它?
我想在我的控制器中编写一个before_filter来识别接下来要执行的操作.这是出于授权目的(这有点像role_requirement插件那样做..)
例如:如果用户键入此URL http://localhost:3000/users,则默认为用户/索引操作.在我的用户控制器中,我有一个前过滤器方法说'check_permission',我希望该方法将'index'作为动作.
我有一个问题,这里有两个类:
class Base{
public:
virtual void toString(); // generic implementation
}
class Derive : public Base{
public:
( virtual ) void toString(); // specific implementation
}
Run Code Online (Sandbox Code Playgroud)
问题是:
如果我想要使用类型为Base的指针执行多态性的类Derive的子类,那么括号中的关键字virtual是否必要?
如果答案是否定的,那么带有和不带虚拟的类派生的成员函数toString有什么区别?
我正在尝试将下面的mysql查询结果网格化为单个json对象,但不太确定如何正确地执行它.
$id = $_POST['id'];
$sql = "SELECT contracts.po_number, contracts.start_date, contracts.end_date, contracts.description, contracts.taa_required, contracts.account_overdue, jobs.id AS jobs_id, jobs.job_number, companies.id AS companies_id, companies.name AS companies_name
FROM contracts
LEFT JOIN jobs ON contracts.job_id = jobs.id
LEFT JOIN companies ON contracts.company_id = companies.id
WHERE contracts.id = '$id'
ORDER BY contracts.end_date";
$sql2 = "SELECT types_id
FROM contracts_types
WHERE contracts_id = '$id'";
//return data
$sql_result = mysql_query($sql,$connection) or die ("Fail.");
$arr = array();
while($obj = mysql_fetch_object($sql_result)) { $arr[] = $obj; }
echo json_encode($arr); //return json
//plus …Run Code Online (Sandbox Code Playgroud) 为什么Google会while(1);在其(私人)JSON响应前加上?
例如,这是在Google日历中打开和关闭日历时的响应:
while(1);[['u',[['smsSentFlag','false'],['hideInvitations','false'],
['remindOnRespondedEventsOnly','true'],
['hideInvitations_remindOnRespondedEventsOnly','false_true'],
['Calendar ID stripped for privacy','false'],['smsVerifiedFlag','true']]]]
Run Code Online (Sandbox Code Playgroud)
我认为这是为了防止人们eval()对它进行操作,但你真正需要做的就是更换while然后你就可以了.我认为eval预防是为了确保人们编写安全的JSON解析代码.
我已经在其他几个地方看到了这种情况,但谷歌(邮件,日历,通讯录等)的情况更是如此.奇怪的是,谷歌文档开始了&&&START&&&,谷歌联系人似乎开始while(1); &&&START&&&.
这里发生了什么?