【转】WCF和Socket开发中三端通信、异步、双工、保持长连接、断线重连等技术...

http://www.cnblogs.com/fmp/archive/2011/12/08/2280352.html

最近在做一个服务器管理工具,我们简称为OPTools。功能大致包括服务器进程监控、游戏开关服、数据库备份、文件分发、服务器文件管理等等。

 

项目整体架构分为三端:客户端(多)←→中心服务器端(一)←→游戏服务器端(多)

 

①客户端:选择了Winform

②中心服务器端:使用Windows Service

③游戏服务器端:由于游戏服务器需要跨平台,有Windows的,有Linux的。所以不能DotNet来做,最终选择了脚本语言Python。

 

项目的技术瓶颈主要集中在通信上,我们准备了两个方案:

1.客户端(多)←socket→中心服务器端(一)←socket→游戏服务器端(多)

2.客户端(多)←WCF→中心服务器端(一)←socket→游戏服务器端(多)

中心与游戏服务器之间由于要跨语言,所以定下来使用socket通信。主要区别在与客户端和中心服务器端之间分别使用Socket和WCF进行通信。

 

开始我们选择了第一套方案,统一使用Socket进行通信。其中使用了博客园牛人:overred 的 shuttler.net 框架。 但是到监控和开关服功能开发基本完成的时候,发现通信过程中很不稳定,期间也出现了各种各样那一琢磨的问题。后来痛下决定,改为更为成熟的WCF进行通信。

 

其中涉及到了WCF和Socket中三端通信、异步、双工、保持长连接、断线重连等技术。

转载于:https://www.cnblogs.com/swjm119/archive/2011/12/08/2280478.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WCF双工通信(Duplex communication)是一种通信方式,它允许客户端和服务器之间进行双向通信。在传统的客户端/服务器模型,客户端通过发送请求来获取服务器的响应,而服务器没有办法主动向客户端发送信息。但在某些情况下,需要服务器能够主动向客户端发送信息,这时就可以使用WCF双工通信。 实现WCF双工通信需要以下步骤: 1. 定义服务契约:在服务契约,需要定义一个双工操作,该操作将用于客户端和服务器之间的双向通信。例如: ``` [ServiceContract(CallbackContract = typeof(IMyServiceCallback))] public interface IMyService { [OperationContract(IsOneWay = true)] void MyOperation(); } public interface IMyServiceCallback { [OperationContract(IsOneWay = true)] void MyCallback(); } ``` 上面代码,`IMyService`是服务契约,它包含一个双工操作`MyOperation`。`IMyServiceCallback`是回调契约,它包含一个回调操作`MyCallback`,用于服务器向客户端发送信息。 2. 实现服务:实现服务契约的操作,包括双工操作和回调操作。例如: ``` [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] public class MyService : IMyService { public void MyOperation() { // 客户端调用了MyOperation操作 // 这里可以向客户端发送信息 OperationContext.Current.GetCallbackChannel<IMyServiceCallback>().MyCallback(); } } public class MyServiceCallback : IMyServiceCallback { public void MyCallback() { // 服务器调用了MyCallback操作 // 这里可以接收客户端发送的信息 } } ``` 上面代码,`MyService`类实现了`IMyService`接口,包含一个双工操作`MyOperation`,它可以调用回调操作`MyCallback`,向客户端发送信息。`MyServiceCallback`类实现了`IMyServiceCallback`接口,包含一个回调操作`MyCallback`,用于接收客户端发送的信息。 3. 配置服务:在配置文件配置服务绑定和终结点,以启用双工通信。例如: ``` <bindings> <netTcpBinding> <binding name="MyBinding" sendTimeout="00:01:00"> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="true" /> <security mode="None" /> </binding> </netTcpBinding> </bindings> <services> <service name="MyNamespace.MyService"> <endpoint address="" binding="netTcpBinding" bindingConfiguration="MyBinding" contract="MyNamespace.IMyService" /> </service> </services> ``` 上面代码,使用`netTcpBinding`绑定配置了一个名为`MyBinding`的绑定,用于双工通信。在服务配置,使用该绑定配置了一个终结点,用于绑定服务契约和实现类。 完成上述步骤后,就可以通过WCF双工通信实现客户端和服务器之间的双向通信了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值