官网:www.supersocket.net/
文档:http://docs.supersocket.net/v1-6/zh-CN
从8.1号开始尝试用它,昨天只试了文档中的Telnet的示例,挺顺利的。但我要做WebSocket呀,怎么办呢,整个文件都不提WebSocket ,我也没有找到怎么设定appServer为WebSocket类型呀!晚上翻手机,发现官网上:
SuperWebSocket 是一个基于SuperSocket开发的,兼容Mono的 WebSocket服务器;
去GitHub上看到这句:SuperWebSocket is being merged into as an additional module .WebSocket. You can useSuperSocket.WebSocket in the same way with SuperWebSocket but with a different namespace.
原来WebSocket已经做成一个组件了,插入到SuperSocket空间下面。 然后用法 不变,只是命名空间要增加一个SuperSocket ,同时它没有自己的官网 ,也没有自己的文档,有点坑!
废话不说了,转入正题
下面是通过vs2015的NuGet需要引入的。
我反复折腾了好久,其实最简单是先安装SuperSocket.WebSocket这个包就行,然后它会引用其它2个。再安装SuperSocket.Engine包,没有这个还会报错。不知道为什么作者不直接给SuperSocket.WebSocket包增加上Engine的依赖。
经过摸索和参考GitHub上的Sample目录,能启动一个服务器了。就直接贴代码了:
//MyWS.CSclass MyWS { WebSocketServer wsApp; public void Start() { wsApp = new WebSocketServer(); wsApp.NewSessionConnected += WsApp_NewSessionConnected;//下面是通过事件响应信息的代码,如果想用命令的话,要注释掉事件,增加上命令相关的类!//wsApp.NewMessageReceived +=new SessionHandler( WsApp_NewMessageReceived); //private void WsApp_NewMessageReceived(WebSocketSession session, string value) //{ // session.Send("you just send msg=" + value.ToString()); //} if (!wsApp.Setup(20000)) { Console.WriteLine("未能Set up ws"); } if (!wsApp.Start()) //Setup with listening port { Console.WriteLine("未能启动ws"); } } public void Stop() { if (wsApp.State == SuperSocket.SocketBase.ServerState.Running) wsApp.Stop(); } private void WsApp_NewSessionConnected(WebSocketSession session) { session.Send("you are connected!" + session.ToString()); } }
//Program.cs class Program { static void Main(string[] args) { MyWS ws = new MyWS(); ws.Start(); while (Console.ReadKey().KeyChar != 'q') { Console.WriteLine("........"); continue; } ws.Stop(); } }
以上代码就能运行了。只是不响应任何消息。下面是增加命令的方法:
//在项目命名空间中,随便增加这样一个类,就能响应指定的命令了public class ADD : SubCommandBase { public override void ExecuteCommand(WebSocketSession session, SubRequestInfo requestInfo) { var paramArray = requestInfo.Body.Split(' '); session.Send((int.Parse(paramArray[0]) + int.Parse(paramArray[1])).ToString()); } }
客户端的JS代码如下:
ws=new WebSocket("ws://localhost:20000");ws.onmessage=(function(msg){console.log(msg.data)})ws.send("add 5 2") //控制台响应 7