登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: 服务器之王! [坛主CLQ的服务器程序开发日记,综合了众多C/C++程序崩溃的原因,强烈推荐!]     [回主站]     [分站链接]
标题
服务器之王! [坛主CLQ的服务器程序开发日记,综合了众多C/C++程序崩溃的原因,强烈推荐!]
clq
2005-11-25 1:17:27 发表 编辑


用java写服务器的怎能和C++写的难度相提并论
http://clq.3322.org/bbs/read.php?tid=588

clq
2005-12-20 21:06:15 发表 编辑

今天说一下PHP [s:7]
对于简单的应用我一向直接用PHP来写,但最近老发现操作系统的连接全部用尽!我想一定是中毒了,检查了一下的确不是很正常,但有一个非常严重的问题:就是apache和mysql之间存在成百上千的连接!我心里一惊,难道PHP不会自动释放数据库连接吗?再看了一个我的代码,果然是很少释放数据连接的--因为我一直认为PHP会自动释放!!

clq
2006-1-22 17:41:33 发表 编辑

嘻嘻,还是不对.是php中有两中数据库连接.长连接是不会自动释放的.虽然我很喜欢PHP,但它的安全性太怕了.以后我们网站的程序要全部用那个HTTP的C程序全部改写过.
clq
2006-1-22 17:51:02 发表 编辑

最近到新公司,已经不是完全用C了. 在他们已有的代码中,用indy的那个tcpserver比较多:( . 唉,这实在令人有点哭笑不得,我想我是改变不了这种现状,那就为在这种现状下更好工作做一点贡献吧.

在他们的代码中通常喜欢用原始的pascal的文件函数来写日志,但这样有一个非常严重的问题.这种函数产生的异常是无法屏蔽的,我试了几种方式都无法使异常不出现,这样的话,会使函数后面的代码不被执行! 我本想,这也不是什么太高要求的服务器,由它算了.但实际工作中,产生错误的情况非常多. 不得已,我想那用windows 的api好了,那总不会异常吧. 因为我很久以前用delphi时就看过TFileStream的源码,知道它是windows api的简单封装,于是就用了这个类.具体代码如下.不过要注意的是,并不是所有TFileStream的函数都不会产生异常.具体的说起来就太多了,大家慢慢体会吧--这是要经验的没有什么别的办法.

procedure printlog2(logInfo:String);//不会引发异常的日志写入函数
var
fs:TFileStream;
filename,s:String;
f:TextFile;
p:pchar;
begin
try
  if PrintLogSwitch<> 'on' then exit;
  filename := logPath + DateToStr(Now)+'.log';
  if not DirectoryExists(logPath) then
  begin
    CreateDir(logPath);
  end;

  //fs:=TFileStream.Create(FileName, fmCreate);
  //fs:=TFileStream.Create(FileName, fmOpenReadWrite);

  {
  if FileExists(FileName) then
    Append(f)
  else
    Rewrite(f);
  }
  if FileExists(FileName) then
    fs:=TFileStream.Create(FileName, fmOpenReadWrite)
  else
    fs:=TFileStream.Create(FileName, fmCreate);
  fs.Seek(0, soFromEnd);

  s:=FormatDateTime('YYYY-MM-DD,hh-mm-ss zzzz',Now)+':'+logInfo+#13#10;
  p:=pchar(s);
  fs.Write(p^, length(s));
  //fs.WriteBuffer(p^, length(s));

  fs.Free;
except

end;
end;

代码有冗余,我也懒得改了. 不过是绝对有效的代码.

clq
2006-2-20 21:50:33 发表 编辑

最近在用C++改写整个phpwind 的程序,写得越深入越发现phpwind的设计之烂实在是触目惊心!----虽然作为它的免费用户及受益者我本不该这么说。但它的问题太严重了一点,不说出来...
我是马甲
2006-12-20 14:34:46 发表 编辑

今天本想把一些东西移植到公司的代码中,意外地发现了一些情况.

一个简单的http请求发送,然后收消息,客户机和服务器都是自己写的.但老是发现还没收完消息客户机就说接收出错的,开始还以为是服务器写错了什么代码.结果多方测试都没其他问题,将客户端发送的信息严格了一下 -- 原来很随意的多发送了几个回车换行字符.这下发现正常了!而且发现如果服务器的send函数已经成功返回了的话,即使这时杀死服务器,客户端也能正常收到消息! 这说明消息是发送到系统缓冲区的,如果已经到了系统缓冲中,发送程序其实就可以马上退出了--我的系统是windows xp sp2.但多发送消息怎么会导致客户端自己在收消息时出错呢?想不通,也许socket认为你上次的发送都没成功,现在要接收是不允许的,不过如果socket一直不关闭这时客户端还是能收到消息的.只能说socket在关闭时会查看是否有未发送的消息,如果有就不允许从这个socket里收消息了.不过这个机制是在客户机上起作用还是在服务端起作用呢?(就是说是服务器不允许在这种情况下发送,还是客户机在这种情况下不允许接收?)

clq
2006-12-30 21:37:32 发表 编辑

上面的那段 indy 代码移植到 kylix 下有个问题,它居然是默认没有超时的,如果没有数据会一直阻塞下去! 害得我今天又出了错,不过indy的控件中只有read的超时而没有send/write的超时,再联想起以前研究过delphi自身的socket类也是这样的,难道发送时都会成功(或是自己失败返回)?unix下的书好象不是这样说的呀.从我个人的经验来看似乎也还是用过select实现一个超时安全些.


......这的确是个问题,改天去看看apache这些程序是怎样处理的.

guest
2006-12-31 23:33:00 发表 编辑

大家新年好!
clq
2007-1-1 23:23:46 发表 编辑

希望大家新年都发财 :)
clq
2007-1-24 14:21:05 发表 编辑

今天偶然看到了两个以前比较忽视的问题,恐怖啊! 参见:
http://www.newbt.net:8022/read.csp?fid=9&tid=1017

多线程环境下简直是"必崩"无疑的bug呀!


总数:100 页次:4/10 首页 << 上一页 下一页  >>  尾页  
总数:100 页次:4/10 首页 << 上一页 下一页  >>  尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1