因为客户和环境需要,外网的服务器上需要访问内网主机上的数据库。我的方案是:内网服务器上启一个socket,与外网服务器保持常连接。外网服务器可以与内网服务器通信。内网服务器上的socket常连接通过控制台应用程序能保持常连接,但是通过windows服务启动常连接会每间隔2分钟断开一次。我已经使用心跳包保持连接活跃了,是否windows服务有什么机制会断开连接?
—- 3分
最简单的办法:
既然是服务器,肯定是多网卡的吧,外网服务器连一根网线到内网服务器,然后外网服务器的web程序也好,还是什么服务程序也好,就可以直接连接内网服务器的数据库了,而不要再通过自己做的什么不靠谱的服务程序去转
既然是服务器,肯定是多网卡的吧,外网服务器连一根网线到内网服务器,然后外网服务器的web程序也好,还是什么服务程序也好,就可以直接连接内网服务器的数据库了,而不要再通过自己做的什么不靠谱的服务程序去转
—-
而如果你的外网服务器跟内网服务器根本就不在一个局域网上,那么也只能自己做程序了
自己做服务,你首先要保证服务稳定,最好在服务器启动的时候就启动一个timer,timer里可以什么都不做,但是可以让系统认为服务在运行,而不是超时没有响应就自动关闭了
自己做服务,你首先要保证服务稳定,最好在服务器启动的时候就启动一个timer,timer里可以什么都不做,但是可以让系统认为服务在运行,而不是超时没有响应就自动关闭了
—-
哎,要是这么简单就好了。一台外网服务器在电信机房,客户的服务器都是分布在不同的地方,不可能通过网线直接去连啊,我们的服务器想随时从客户的服务器上获取数据,但是客户的服务器没有公网IP,所以采用这种方式转发了。
—-
哎,要是这么简单就好了。一台外网服务器在电信机房,客户的服务器都是分布在不同的地方,不可能通过网线直接去连啊,我们的服务器想随时从客户的服务器上获取数据,但是客户的服务器没有公网IP,所以采用这种方式转发了。
—-
其实用短连接,如果通信不是太频繁,也完全够用了
每次客户端连接服务端,发送个0,服务端如果没有请求,就返回个0,然后就可以断开了
每次客户端连接服务端,发送个0,服务端如果没有请求,就返回个0,然后就可以断开了
如果有请求,返回请求,那么客户端就可以先把请求的数据发过去,然后再断开
—-
其实用短连接,如果通信不是太频繁,也完全够用了
每次客户端连接服务端,发送个0,服务端如果没有请求,就返回个0,然后就可以断开了
每次客户端连接服务端,发送个0,服务端如果没有请求,就返回个0,然后就可以断开了
如果有请求,返回请求,那么客户端就可以先把请求的数据发过去,然后再断开
—-
其实用短连接,如果通信不是太频繁,也完全够用了
每次客户端连接服务端,发送个0,服务端如果没有请求,就返回个0,然后就可以断开了
每次客户端连接服务端,发送个0,服务端如果没有请求,就返回个0,然后就可以断开了
如果有请求,返回请求,那么客户端就可以先把请求的数据发过去,然后再断开
—- 10分
你可以先不用windows服务实现测试一下,我觉得应该和windows服务没有太多关系
—- 7分
外网访问内网某个特定服务一般的做法是使用防火墙做NAT
—- 20分
没有什么机制给你断掉连接。
所有的服务程序,都应该可以同时用Conosle程方式执行,以便观察其在什么情况下会“垮掉”。而且要记录必要的日志。
—-
不用windows服务,我用控制台应用程序启动服务是正常的,windows服务就会出现2分钟断开一次的情况。不过今天测试又正常了,莫名其妙……
—-
嗯,主要是客户那边的局域网不归我们管,跟他们沟通还比较麻烦,能开个端口访问我们的服务器就已经很不错了。
—-
嗯,今天突然莫名其妙就好了。所以我感觉应该跟服务也没多大关系,记录日志就是e.BytesTransferred <=0,估计是网络问题。
我看过好多你回复的帖子。。你帮我解决过好多问题,太感谢你了
CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明socket 常连接,使用windows服务启动会间隔断开!