当前位置:

SuperSocket.WebSocket 摸索记录_HTML5_WEB

官网:www.supersocket.net/

文档:http://docs.supersocket.net/v1-6/zh-CN

从8.1号开始尝试用它,昨天只试了文档中的Telnet的示例,挺顺利的。但我要做WebSocket呀,怎么办呢,整个文件都不提WebSocket ,我也没有找到怎么设定appServer为WebSocket类型呀!晚上翻手机,发现官网上:

SuperWebSocket 是一个基于SuperSocket开发的,兼容Mono的 WebSocket服务器; [Codeplex][Github]

去GitHub上看到这句:SuperWebSocket is being merged into SuperSocket 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需要引入的。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="log4net" version="2.0.3" targetFramework="net452" />
  <package id="SuperSocket" version="1.6.6.1" targetFramework="net452" />
  <package id="SuperSocket.Engine" version="1.6.6.1" targetFramework="net452" />
  <package id="SuperSocket.WebSocket" version="1.6.6.1" targetFramework="net452" />
</packages>

我反复折腾了好久,其实最简单是先安装SuperSocket.WebSocket这个包就行,然后它会引用其它2个。再安装SuperSocket.Engine包,没有这个还会报错。不知道为什么作者不直接给SuperSocket.WebSocket包增加上Engine的依赖。

经过摸索和参考GitHub上的Sample目录,能启动一个服务器了。就直接贴代码了:

//MyWS.CS
class MyWS
    {
        WebSocketServer wsApp;
        public void Start()
        {
            wsApp = new WebSocketServer();
            wsApp.NewSessionConnected += WsApp_NewSessionConnected;
//下面是通过事件响应信息的代码,如果想用命令的话,要注释掉事件,增加上命令相关的类!
//wsApp.NewMessageReceived +=new SessionHandler<WebSocketSession, string>( 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

 

评论:

登录后发表评论




2023.01.28 群组聊天