websocket快速入门

传统的http请求需要实现数据一直变化,需要采用轮询的做法,比较浪费客户端性能,看到有些公司招聘要求有熟悉websocket

我就粗略的搞了一下,主要是网上借鉴,websocket的实现,只需要一次连接,保持连接即可,轮询的做法是发送一次就断掉,

网卡的时候服务器都可能给搞崩掉,websocket可以建立与客户端一直连接,服务端通过广播的方式发送数据给客户端,客户端可以

随时发送数据到服务端

该功能服务端我使用的是C#实现的,服务端实现过程如下:

(一)引入websocket包

打开NuGet工具包搜索websocket

下载SuperSocket.websocket引入到项目中

(二) 新建一个控制台程序

粘贴以下代码

using SuperSocket.WebSocket;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;

namespace webSocketTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("服务端");
            WebSocketServer webSocketServer = new WebSocketServer();
            webSocketServer.NewSessionConnected += WebSocketServer_NewSessionConnected;
            webSocketServer.NewMessageReceived += WebSocketServer_NewMessageReceived;
            webSocketServer.SessionClosed += WebSocketServer_SessionClosed;
            if (!webSocketServer.Setup("127.0.0.1", 1234))
            {
                Console.WriteLine("设置服务监听失败!");
            }
            if (!webSocketServer.Start())
            {
                Console.WriteLine("启动服务监听失败!");
            }
            Console.WriteLine("启动服务监听成功!");
            Console.WriteLine("按任意键结束。。。");
            Console.ReadKey();
            webSocketServer.Dispose();
        }
        private static void WebSocketServer_NewSessionConnected(WebSocketSession session)
        {
            string msg = $"{DateTime.Now.ToString("HH:mm:ss")} 客户端:{GetwebSocketSessionName(session)} 加入";
            Console.WriteLine($"{msg}");
            SendToAll(session, msg);
        }
        private static void WebSocketServer_NewMessageReceived(WebSocketSession session, string value)
        {
            string msg = $"{DateTime.Now.ToString("HH:mm:ss")} 服务端收到客户端:{GetwebSocketSessionName(session)}发送数据:{value}";
            Console.WriteLine($"{msg}");
            SendToAll(session, value);
        }
        private static void WebSocketServer_SessionClosed(WebSocketSession session, SuperSocket.SocketBase.CloseReason value)
        {
            string msg = $"{DateTime.Now.ToString("HH:mm:ss")} 客户端:{GetwebSocketSessionName(session)}关闭,原因:{value}";
            Console.WriteLine($"{msg}");
            SendToAll(session, msg);
        }
        /// <summary>
        /// 获取webSocketSession的名称
        /// </summary>
        /// <param name="webSocketSession"></param>
        public static string GetwebSocketSessionName(WebSocketSession webSocketSession)
        {
            return HttpUtility.UrlDecode(webSocketSession.SessionID);
        }
        /// <summary>
        /// 广播,同步推送消息给所有的客户端
        /// </summary>
        /// <param name="webSocketSession"></param>
        /// <param name="msg"></param>
        public static void SendToAll(WebSocketSession webSocketSession, string msg)
        {
            foreach (var item in webSocketSession.AppServer.GetAllSessions())
            {
                item.Send(msg);
            }
        }
    }
}

  (三)启动 当运行到 

webSocketServer.Setup("127.0.0.1", 1234) 这个的时候 就会报错,说找不到

SuperSocket.SocketEngine 这个包 ,去NuGet里面搜索下载一个就行了

 

(四)客户端

var socket = new WebSocket('ws://127.0.0.1:1234')
sOpen() {
      socket.onopen = this.messagess()
    },
    messagess() {
      alert('connect success!')
    },
    send() {
      socket.send(this.loginForm.username)
    }
 
posted @ 2020-09-27 22:18  学就完了  阅读(329)  评论(0)    收藏  举报