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)
}

浙公网安备 33010602011771号