前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SuperSocket.WebSocket 摸索记录

SuperSocket.WebSocket 摸索记录

作者头像
申君健
发布2018-09-21 15:30:04
2.4K0
发布2018-09-21 15:30:04
举报
文章被收录于专栏:前端侠2.0前端侠2.0

官网: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需要引入的。

代码语言:javascript
复制
<?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目录,能启动一个服务器了。就直接贴代码了:

代码语言:javascript
复制
//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());
        }
    }
代码语言:javascript
复制
//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();
        }
       
    }

以上代码就能运行了。只是不响应任何消息。下面是增加命令的方法:

代码语言:javascript
复制
//在项目命名空间中,随便增加这样一个类,就能响应指定的命令了
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代码如下:

代码语言:javascript
复制
ws=new WebSocket("ws://localhost:20000");
ws.onmessage=(function(msg){console.log(msg.data)})
ws.send("add 5 2")  //控制台响应 7  
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/08/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档