使用websocket-sharp实现websocket连接

由于最近的项目需要,在C#中使用websocket进行消息推送服务,本着不重复造轮子的原则,在github上找到了两款可用的开源类库,Fleck和websocket-sharp,经过对比,决定使用websocket-sharp(提供服务器与客户端的使用)来实现项目需求,现把具体使用情况记录如下:

开启websocket服务

/// <summary>
/// 监听服务
/// </summary>
private WebSocketServer WebSocketServer { set; get; }

/// <summary>
/// 是否启动服务
/// </summary>
public bool IsServerStart
{
    get { return WebSocketServer?.IsListening ?? false; }
}

/// <summary>
/// 开启websocket服务
/// </summary>
private void StartWebSocketServer()
{
    if (!IsServerStart)
    {
        WebSocketServer = new WebSocketServer($"ws://{WebSocketServerUrl}");

        WebSocketServer.AddWebSocketService<ServerChat>("/Chat", () =>
        {
            /*这里可以实现多个客户端连接管理*/
            ServerChat serverChat = new ServerChat();

            serverChat.OnMessageEvent += OnMessageEvent;

            return serverChat;
        });

        WebSocketServer.Start();

        WebSocketStatus = $@"服务器监听地址:ws://{WebSocketServer.Address}:{WebSocketServer.Port}{WebSocketServer.WebSocketServices.Paths.ToList<string>()[0]}";

        BtnServerStatus = "关闭服务";
    }
    else
    {
        WebSocketServer.Stop();
        BtnServerStatus = "启动服务";
    }
}

/*定义websocket监听行为*/
public class ServerChat : WebSocketBehavior
{
    public EventHandler<string> OnMessageEvent;

    private string _name;

    public ServerChat() { }

    private string getName()
    {
        var name = Context.QueryString["name"];
        return name;
    }

    protected override void OnOpen()
    {
        _name = getName();

        List<string> ids = Sessions.IDs.ToList<string>();
        string id = this.ID;
    }

    protected override void OnMessage(MessageEventArgs e)
    {
        //Sessions.Broadcast(String.Format("{0}: {1}", _name, e.Data));

        Send($"接收:{ e.Data}");

        OnMessageEvent?.Invoke(this, $"{ID};{e.Data}");
    }
}

websocket监听地址可以设为(WebSocketServerUrl):0.0.0.0:8080。使用以上代码开启服务器后,访问连接可以为:ws://127.0.0.1:8080/Chat?Name=12223&password=123456。每一个客户端连接成功后,会自动创建一个ServerChat对象,在这个类里面可以定义相关的事件发布进行客户端管理。以上为最简单的websocket服务启动方式,详情可以参考作者官网信息:http://sta.github.io/websocket-sharp/

连接websocket服务

创建好websocket服务后,可以进行客户端连接了,现使用本地连接:ws://127.0.0.1:8080/Chat?name=123456作为测试。客户端连接代码如下:

private WebSocket WebSocketClient;

private void ClientConnectServer()
{
    if (null == WebSocketClient)
    {
        WebSocketClient = new WebSocket($"ws://{ClientConnectUrl}");

        WebSocketClient.OnMessage += WebSocketClient_OnMessage;
        WebSocketClient.OnOpen += WebSocketClient_OnOpen;
        WebSocketClient.ConnectAsync();
    }
}

private void WebSocketClient_OnOpen(object sender, System.EventArgs e)
{
    ConnectedStatus = "登录成功";
}

private void WebSocketClient_OnMessage(object sender, MessageEventArgs e)
{
    if (e.IsText)
    {
        ClientShowReceivedData = e.Data;
    }
}

至此,实现了简单的websocket服务和客户端连接。使用开源类库websocket-sharp非常方便的使用websocket进行服务器以及客户端开发,在此感谢类库作者的贡献,方便了后人,避免了重复造轮子。

使用vs开发C#项目的话,可以在NuGet中搜索WebSocketSharpFork进行安装。

以上demo可以在项目:TopTools中找到,这个是本人一直致力开发的个人项目,意在开发出一款继承各种生产力的工具类库,欢迎指点。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值