专栏首页前端侠2.0SuperSocket.WebSocket 摸索记录

SuperSocket.WebSocket 摸索记录

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 文本过长后,显示省略号。ff特有的hack方法。

    看了这篇文章,http://www.w3cplus.com/content/css3-text-overflow

    申君健
  • css3的transform造成z-index无效, 附我的牛逼解法

    我想锁表头及锁定列。昨天新找的方法是用css3的transform,这个应该在IE9以上都可以的。

    申君健
  • html5 Postmessage解决跨域问题

    为了实现不同域之间的通信,需要在操作系统的 hosts 文件添加两个域名,进行模拟。

    申君健
  • WordPress 顶部管理工具条添加自定义栏目

    默认的话,WordPress 顶部的黑色那个管理菜单工具条只是那么几个:博客链接、评论、更新、+新建。在二次开发WordPress 的时候,我们可以通过add_...

    Jeff
  • Vue 超越 React 破 10 万星,比球赛精彩

    近日,Vue 在 Github 上的星星数第一次超过了 React,React 的主要开发者 Dan 在 Twitter 上表示了祝贺。

    IT派
  • nginx+php负载均衡集群环境中的session共享方案梳理

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登...

    洗尽了浮华
  • 面试官问:集群部署时,分布式 session 如何实现?

    面试官问了你一堆 dubbo 是怎么玩儿的,你会玩儿 dubbo 就可以把单块系统弄成分布式系统,然后分布式之后接踵而来的就是一堆问题,最大的问题就是分布式事务...

    IT大咖说
  • 大厂面试题:集群部署时的分布式 session 如何实现?

    session 是啥?浏览器有个 cookie,在一段时间内这个 cookie 都存在,然后每次发请求过来都带上一个特殊的 jsessionid cookie,...

    Java码农那些事
  • WebService如何调试及测试工具

    通常,我们在Visual Studio里调试ASP.NET网站,都是加个断点,然后按F5,在VS自带的虚拟服务器下调试的。但有时候,VS自带的服务器弱爆了,无法...

    跟着阿笨一起玩NET
  • “协力抗疫,码力 全开”线上黑客马拉松 【19号】万一地图

    春晚黄晓明和囧妈里都谈到了一个非常哲学非常深的问题:你以为(你的幻想)和我以为(我的幻想)之间的鸿沟.

    度量衡-工业-地图

扫码关注云+社区

领取腾讯云代金券