SuperSocket.WebSocket 摸索記錄

官網:www.supersocket.net/javascript

文檔:http://docs.supersocket.net/v1-6/zh-CNjava

從8.1號開始嘗試用它,昨天只試了文檔中的Telnet的示例,挺順利的。但我要作WebSocket呀,怎麼辦呢,整個文件都不提WebSocket ,我也沒有找到怎麼設定appServer爲WebSocket類型呀!晚上翻手機,發現官網上:git

SuperWebSocket 是一個基於SuperSocket開發的,兼容Mono的 WebSocket服務器; [Codeplex][Github]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.web

原來WebSocket已經作成一個組件了,插入到SuperSocket空間下面。 而後用法 不變,只是命名空間要增長一個SuperSocket ,同時它沒有本身的官網 ,也沒有本身的文檔,有點坑!服務器

廢話不說了,轉入正題websocket

下面是經過vs2015的NuGet須要引入的。session

<?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的依賴。app

通過摸索和參考GitHub上的Sample目錄,能啓動一個服務器了。就直接貼代碼了:socket

//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
相關文章
相關標籤/搜索