一个关于SocketConnection的疑问(100分)

  • 主题发起人 主题发起人 LeonSu
  • 开始时间 开始时间
L

LeonSu

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟用D6开发了一个简单的三层数据库,服务器是固定IP,基本架构是Socketconnection+Access,连接是一点总是都没有,但始终不能长时间保持连接,空闲久了后,客户端总是弹出:在一个非套接字上出现错误!
调试了N久,不知道错在哪里,服务器上的ADOConnection控件的KeepConnection的值是True
 
ScktSrvr默认的是保持10分钟,你把它调到最大就可以了。
 
ScktSrvr.exe timeout
 
我设的是:0
 
建议用短连接
 
kite20020304:
 短连接?不太明白
 
客户端是通过远程连接还是LAN.
 
看是不是你路由或拨号的问题.
 
我的路由完全正常,如果不正常,就不能连到远程服务器上了
 
解决了,不知道是不是Scktsrvr的BUG,在远程服务器上,Inactive Timeout设为0无效,不能保持连接,我现在是设的600(10个小时),现在没问题。
但是,我发现,当我设为1440(24小时)时,客户端连接不上,不知道怎么回事
 
Socket Server 的确是能适用到相联网的。但是在内部轮询上会出现问题。如果你Tiemout设置为零了,如果是出现了这个错误。我想你可以测试一下是否在错误提示后会出现Active给False掉的情况,如果没有,那可以屏蔽,如果有的话,那就说明了这个问题的存在,一般服务器都会与客服端建立心跳联系的。由于闲置久了,在线程的分配方面可能不是处理的那么好,所有在你闲置久了的情况下又请求服务,就会出现这样的问题了。为了保持连接状态,你可以发送心跳到服务上。证明连接正常,如果心跳发送失败,请关闭客服端在利用线程连接,如果失败,那就直接给提示了。
 
我的Inactive Timeout设为0,可以不间断24小时工作.
 
Socket Server 不是你自己编写的,所有你不知道问题出现在哪里,但也不能保证你的代码完全是正确的。呵呵。我想你说的那个报错是不会引起连接断开的。。。 如果真的断开了,那只能说明一个问题:要么服务器或客服机上的防火墙会自动关闭闲暇久了的Socket连接,要么就是后台数据处理接口和Socket Server服务通信存在问题了。建议你添加一个回调函数来作为心跳测试吧。就知道问题所在了。
 
Inactive Timout 设置为零 地球人都知道是无限超时。 但这样如果你客服能保持在50以内还能在服务器上承受,如果一多的话,就要考虑线程和Pool管理了。实际照你这样说的,看来客服只是在服务器上请求数据库操作而已。如果你不想弄心跳或是觉得Pool管理以及线程不好操作,你可以进行非实时的客服后台数据处理呀?
 
webwx:
在出现错误提示后,在客户端并没有出现Active给False的情况,但服务器端的Active应该是被False了。
“心跳连接”?是什么东东?
另外,我在客户端设置了一个每隔5分钟就会自动读取一遍数据库的过程,还好象还是没保持连接。
 
你看到服务端的连接线程终止了么?最简单就是在Users里面看看! 其实Socket Server在互联网跑问题是非常多了 很难保证数据的双通道传送。
简单的说吧:心跳就是把你每隔5分钟读数据库的过程缩短成3-5秒或是10-15秒。
如果只有一台机子,那最笨的办法就是屏蔽错误,Try Client。这样自少可以在出现错误的情况下试着再次连接服务器。至于要重试几次就看你自己了。重试过后,无法连接的再给出提示咯。
 
这里就比较奇怪了,连接线程并没有中止(USER中看得到),所以,我认为是其他某些地方发生了改变,但为什么会改变呢?
我知道,当使用SOCKETCONNECTION时,当客户端与服务器连接时,会在服务器端创建一个Remote DataModule实例,我想是这个连接中断了,就好象两个人在互相打电话,电话线断了,但切断电话线的并不是这两个人的主观意图

明白你的心跳测试了,我也想过用这个
 
呵呵。。。 我就说过了啊 你个错误是不会引起掉线的。。。 try过去就么事了。不过你服务器没有做过Pool或是多线程的话,那个远程Module只会建一个的。那应该问题不是很大。你try过去就可以了。
 
给你一个思路吧 呵呵 以后最好不要用那个Remote DataModule 用Com对象吧 呵呵。IAppServer也换成IDispatch吧 效率挺不错的。把Delphi没有的东东跳过去了。Socket服务器 你可以自己找找资料写个IOCP的。。。 这样你的服务器就算可拓扑性比较强了。
 
OK,结贴了,虽然还是不完全明白,但明白了一点,我的三层方面的知识太少了,要去学学基础知识了。
 
后退
顶部