用 ServerSocket 写了个聊天服务程序,非阻塞模式,平均在线40多人,每次连续运行三天后程序就当掉,200分请高人相助。(200分)

  • 主题发起人 主题发起人 yshu
  • 开始时间 开始时间
为何不采用线阻塞模式,采用多线程?
 
也可能是Delphi Socket控件有bug也说不定,你在程序中加一些调试信息吧(将有可能出
错的地方),呵呵,一点线索也没有,没办法判断是哪里出的错?
 
谢谢大家,OS 是 NT ,采用单循环不用多线程是为了节省服务器资源,可能是socket控件
的BUG了,我在Delphi5中安装了indy,可惜没有Demo 好象控件是多线路阻塞机制的,如果
改起来不太花时间的话,我就用indy试试。
 
yshu,最近我也在写这个东西,也遇到一些问题,所以上次我想请教你是
如何作些保护机制的。可能是你程序写的有问题,比如说机器a->b发送信息
你是如何实现?表面上没有什么错误,但是隐含着不少问题,我曾经也是这
样的,只能在几台机器上运行聊天系统,一多服务器就出现问题了。
socket控间没有什么问题,许多聊天系统都是用这个作的!
 
聊天室是 Browser --> Chatserver ,几个月前调试时地确会有不少错误信息弹出来,
但经过 log 分析,已经都解决了,测试的时候最高有127人同时在线,没出现任何错误,
(除了异常中止)
具体聊天处理和别的程序一样,浏览器请求,serversocket 在 onclientread 事件中取
得客户socket 记录在链表中,发送数据时取出对应客户socket 用 sendtext发送,

在onclientread 事件中用 sendtext() 之前是否要加 sleep(5) ?以前看到过有人在
多线程收发时用过,说是避免收发太快而造成死锁。

还有我以前在过程中大量使用了 Abort, 现在都改成 Exit 了, 正在测试,看结果如何。
 
我遇到过类似的问题,后来我在每个发送过程之前都加了一个Sleep(1)就好了。
不知道是不是这个原因?
 
yshu:
可否看看你的源代码?
 
我觉得还是用多线程阻塞的方式比较可靠。
 
接受答案了。
 
多人接受答案了。
 
TO yshu:
你是怎么解决这个问题的,服务端是用了多线程阻塞吗?
  能否告诉我你的QQ号,我这也出现和你相近的问题,想请教你,请你给予帮助!
谢谢!!!!
Email:gsw798@163.net
QQ:27191895
   
  
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
619
import
I
后退
顶部