您的位置:首页 > 编程语言 > C#

SuperWebSocket服务器端开发,实现c#与webSocket的完美结合

2013-07-18 15:59 1101 查看

SuperWebSocket是基于.NET开源Socket框架SuperSocket开发的,
SuperSocket所支持的大部分功能在SuperWebSocket中得到了继承。用户可通过SuperWebSocket来快速的构建可靠的,高性能的websocket服务器端应用程序。和SuperSocket一样,SuperWebSocket可以控制台和windows服务的形式运行,同时它还支持直接运行在Website之内,这样更简化了用户的部署。
从SuperWebSocket 下载最新的0.8版本的代码 http://superwebsocket.codeplex.com/。代码中包含了一个简单的聊天示例。可以供我们参考,学习。

当浏览器不支持webSocket是,我们可以使用 Silverlight 或者 Flash 作为 websocket proxy代理来连接SuperWebSocket
服务器。在下载的聊天示例中,文件"Sampes\SuperWebSocketWeb\LiveChatWithBridge.aspx"展示了如何在不支持websocket的浏览器中使用websocket。

一、配置web.config。具体配置及用法如下:

配置文件示例

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<configSections>

<section name="socketServer" type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine"/>

</configSections>

<appSettings>

<add key="ServiceName" value="BroardcastService"/>

</appSettings>

<socketServer loggingMode="IndependantFile">

<servers>

<server name="BroardcastServer"

serviceName="BroardcastService"

ip="Any" port="911" mode="Async">

</server>

</servers>

<services>

<service name="BroardcastService"

type="SuperSocket.QuickStart.BroadcastService.BroadcastServer, SuperSocket.QuickStart.BroadcastService" />

</services>

</socketServer>

<startup>

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />

</startup>

</configuration>


 

服务名称

<appSettings>

<add key="ServiceName" value="BroardcastService"/>

</appSettings>


这个配置项将被用作SuperSocket系统服务的名称。如果ServiceName设置成BroardcastService, 则运行InstallService.bat这个批处理文件之后, SuperSocket系统服务将以"BroadcastService"这个名字安装到系统之中。

SuperSocket的根配置

<socketServer loggingMode="IndependantFile">

....

</socketServer>


loggingMode

ShareFile: 多个服务器实例共享同日志文件,默认选项;IndependantFile:多个服务器实例拥有独立的日志文件;Console: 控制台日志输出,只在控制台应用程序中有效。

maxWorkingThreads:线程池最大工作线程数量

minWorkingThreads:线程池最小工作线程数量

maxCompletionPortThreads:线程池最大完成端口线程数量

minCompletionPortThreads:线程池最小完成端口线程数量

服务器实例配置

<servers>

<server name="BroardcastServer"

serviceName="BroardcastService"

ip="Any"

port="911"

mode="Async">

</server>

</servers>


name: 服务器实例名称

serviceName: 指定服务器实例运行的服务的名称。此名称为定义此服务器实例运行的服务的节点的名称。

ip: 指定socket服务器监听的服务器IP地址。Any: 监听本机所有的IPv4地址;IPv6Any, 监听本机所有IPv6的地址。

port: 指定socket服务器监听的端口。

mode: Sync:同步模式;Async: 异步模式;Udp: Udp协议

disabled: true或者false。是否禁用该服务器实例,默认为否。

readTimeOut: 从socket读取数据超时时间,默认为0。

sendTimeOut: 从socket发送数据超时时间,默认为0。

maxConnectionNumber: 最大允许的客户端连接数目,默认为100。

receiveBufferSize: 用于接收数据的缓冲区大小,默认为2048。

sendBufferSize: 用户发送数据的缓冲区大小,默认为2048。

logCommand: true或者false,是否记录命令。

clearIdleSession: true或者false, 是否清除空闲会话,默认为false。

clearIdleSessionInterval: 清除空闲会话的时间间隔,默认为120,单位为秒。

idleSessionTimeOut: 会话超时时间,默认值为300,单位为秒。

security: Empty, Tls或者Ssl3。 Socket服务器所采用的传输层加密协议,默认值为空。

maxCommandLength: 最大允许的命令长度,默认值为1024。

disableSessionSnapshot: 是否禁用会话快照,默认值为false。(1.4 SP1)

sessionSnapshotInterval: 生成会话快照的时间间隔。默认值为5,单位为秒。

keepAliveTime: keep alive消息发送时间间隔。默认值为600, 单位为秒。

keepAliveInterval:keep alive失败重试的时间间隔。默认值为60, 单位为秒。

多服务器实例的配置

设置不同的实例名称和IP端口组合即可。

<servers>

<server name="BroardcastServerA"

serviceName="BroardcastService"

ip="Any"

port="911"

mode="Async">

</server>

<server name="BroardcastServerB"

serviceName="BroardcastService"

ip="Any"

port="912"

mode="Async">

</server>

</servers>


服务配置

<services>

<service name="BroardcastService"

type="SuperSocket.QuickStart.BroadcastService.BroadcastServer, SuperSocket.QuickStart.BroadcastService" />

</services>


name: 服务定义的名称,即服务器实例节点serviceName所对应的名称。

type: 该服务所对应AppServer类型的完整名称。
二、添加相关dll文件引用:
log4net.dll、SuperSocket.Common.dll  、SuperSocket.SocketBase.dll、  SuperSocket.SocketEngine.dll 和SuperWebSocket.dll四个库文件。
三、编写服务器及Global.axas文件:
 var socketServer = m_Bootstrap.AppServers.FirstOrDefault(s => s.Name.Equals("SuperWebSocket")) as WebSocketServer;

            socketServer.NewMessageReceived += new SessionHandler<WebSocketSession, string>(socketServer_NewMessageReceived);//添加新消息到达事件
            socketServer.NewSessionConnected += socketServer_NewSessionConnected;//添加新客户端接入事件
            socketServer.SessionClosed += socketServer_SessionClosed;//添加连接关闭事件

它的用法与websocket基本相同,都是事件机制的。所以只需要添加相应的事件,按照需要编写事件处理代码即可。

四、编写客户端程序
客户端websocket的编写可参考http://www.cnblogs.com/dxy1982/archive/2012/01/19/2325419.html

参考资源:http://www.cnblogs.com/jzywh/archive/2011/04/20/2022946.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐