官網: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