C# .net5 WebSocket 应用示例

当你需要ChatAI服务但无法魔法或没有海外手机号码时,Chat8就是你的解决方案。我们基于OpenAi开发,所有用户内容都会加密,欢迎使用!点击使用:
https://chat.chat826.com/#/register?bronk_on=375671

C# .net5 WebSocket 应用示例
C# .net5 SuperWebSocket 应用示例
C# Fleck实现websocket

源码
https://gitee.com/zzbbc/samplewebsocketsignalr

1,通道引入 websocket 中间件

app.UseWebSockets();

2,创建websocket连接

 [HttpGet("/ws")]
        public async Task Get()
        {
            if (HttpContext.WebSockets.IsWebSocketRequest)
            {
                //接受websocket客户端连接
                var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();
                //await Echo(webSocket);
                await Echo(webSocket, dic);
            }
            else
            {
                //不是websocket客户端请求
                HttpContext.Response.StatusCode = 400;//
            }
        }

3,客户端连接成功,接收消息,发送消息,客户端断开

private async Task Echo(WebSocket webSocket, Dictionary<string, WebSocket> dic)
{
    var buffer = new byte[1024 * 4];
    var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
    var user = Encoding.UTF8.GetString(buffer, 0, buffer.Length);
    dic.Add(user, webSocket);
    while (!result.CloseStatus.HasValue)
    {
        var message = Encoding.UTF8.GetString(buffer, 0, buffer.Length);
        if (message.Contains("***"))
        {
            var msgArr = message.Split("***");
            var msgDate = msgArr[0];
            var msgTo = msgArr[1];
            if (dic.ContainsKey(msgTo))
            {
                var webSocketGit = dic[msgTo];
                //向客户端发送消息
                await webSocketGit.SendAsync(new ArraySegment<byte>(buffer, 0, buffer.Length), result.MessageType, result.EndOfMessage, CancellationToken.None);
            }
            else
            {
                throw new Exception("用户不存在");
            }
        }
        else
        {
            //向客户端发送消息
            await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, buffer.Length), result.MessageType, result.EndOfMessage, CancellationToken.None);
        }
        //继续接受客户端消息
        result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
    }
    //关闭释放与客户端连接
    await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
}

4 JavaScript

<script type="text/javascript">
    
    let ws = new WebSocket('ws://localhost:5000/ws');//连接的就是api网站的地址
    ws.onmessage = function (e) {
        //监听消息
        console.log(e);
        console.log(e.data);
    };

    ws.onmessage=function(res)
    {
        console.log(res.data);
    }

    function add(){
        var msg=document.getElementById("msg").value;
        var to=document.getElementById("to").value;
        ws.send(`${msg}***${to}`);
    }  

</script>

h5

<div class="text-center">
 

    <input id="msg"/>
    <input id="to"/>
    
    <button οnclick="add()">发送数据</button>
</div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值