当前位置: 首页 > news >正文

溧阳城乡建设厅网站做视频课程网站

溧阳城乡建设厅网站,做视频课程网站,wap织梦手机网站,哈尔滨企业制作网站NET7下用WebSocket做简易聊天室 步骤#xff1a; 建立NET7的MVC视图模型控制器项目创建websocket之间通信的JSON字符串对应的实体类一个房间用同一个Websocketwebsocket集合类#xff0c;N个房间创建websocket中间件代码Program.cs中的核心代码#xff0c;使用Websocket聊…NET7下用WebSocket做简易聊天室 步骤 建立NET7的MVC视图模型控制器项目创建websocket之间通信的JSON字符串对应的实体类一个房间用同一个Websocketwebsocket集合类N个房间创建websocket中间件代码Program.cs中的核心代码使用Websocket聊天室HTML页面代码 参考文章.NET Core中WebSocket的使用详解_.net websocket-CSDN博客 GIT源码地址公开仓库 里面还有以前做的.NET FRAMEWORK的websocket示例代码 建立NET7的MVC视图模型控制器项目创建websocket之间通信的JSON字符串对应的实体类 namespace NetCore.WebSocketDemo.Models {/// summary/// websocket之间通信的JSON字符串转的实体类/// /summarypublic class Message{/// summary/// websocket对应的ID/// /summarypublic string SendClientId { set; get; }/// summary/// 加入房间join 发送消息send_to_room 离开房间levea/// /summarypublic string action { set; get; }/// summary/// 房间号/// /summarypublic string roomNo { set; get; }/// summary/// 昵称/// /summarypublic string nick { set; get; }/// summary/// 发送的消息内容 /// /summarypublic string msg { set; get; }} } 一个房间用同一个Websocket using System.Net.Sockets; using System.Net.WebSockets; using System.Text;namespace NetCore.WebSocketDemo.Models {/// summary/// 一个房间里的都用这个websocket/// /summarypublic class WebsocketClient{public string Id { set; get; }public string RoomNo { set; get; }public WebSocket WebSocket { set; get; }public async Task SendMessageAsync(string text){var recvBytes Encoding.UTF8.GetBytes(text);var sendBuffer new ArraySegmentbyte(recvBytes);try{await WebSocket.SendAsync(sendBuffer, WebSocketMessageType.Text, true, CancellationToken.None);}catch (Exception ex){throw ex;} }} }websocket集合类N个房间 namespace NetCore.WebSocketDemo.Models {/// summary/// websocket集合类N个房间/// /summarypublic class WebsocketClientCollection{private static ListWebsocketClient _clients new ListWebsocketClient();public static void Add(WebsocketClient client){_clients.Add(client);}public static void Remove(WebsocketClient client){_clients.Remove(client);}public static WebsocketClient Get(string clientId){var client _clients.FirstOrDefault(c c.Id clientId);return client;}public static ListWebsocketClient GetAll(){return _clients;}public static ListWebsocketClient GetClientsByRoomNo(string roomNo){var client _clients.Where(c c.RoomNo roomNo);return client.ToList();}} }创建websocket中间件代码 using Newtonsoft.Json; using System.Net.WebSockets; using System.Text;namespace NetCore.WebSocketDemo.Models {/// summary/// programe里用 app.UseWebsocketHandlerMiddleware();/// /summarypublic static class WebsocketHandlerMiddlewareExtensions{public static IApplicationBuilder UseWebsocketHandlerMiddleware(this IApplicationBuilder builder){return builder.UseMiddlewareWebsocketHandlerMiddleware();}}/// summary/// websocket中间件/// /summarypublic class WebsocketHandlerMiddleware {private readonly RequestDelegate _next;public WebsocketHandlerMiddleware( RequestDelegate next){_next next;} public async Task InvokeAsync(HttpContext context){if (context.Request.Path /ws){//仅当网页执行new WebSocket(ws://localhost:5000/ws)时后台会执行此逻辑if (context.WebSockets.IsWebSocketRequest){//后台成功接收到连接请求并建立连接后前台的webSocket.onopen function (event){}才执行WebSocket webSocket await context.WebSockets.AcceptWebSocketAsync();string clientId Guid.NewGuid().ToString(); ;var wsClient new WebsocketClient{Id clientId,WebSocket webSocket};try{await Handle(wsClient);}catch (Exception ex){await context.Response.WriteAsync(closed);}}else{context.Response.StatusCode 404;}}else{await _next(context);}}private async Task Handle(WebsocketClient websocketClient){WebsocketClientCollection.Add(websocketClient);WebSocketReceiveResult clientData null;do{var buffer new byte[1024 * 1];//客户端与服务器成功建立连接后服务器会循环异步接收客户端发送的消息收到消息后就会执行Handle(WebsocketClient websocketClient)中的do{}while;直到客户端断开连接//不同的客户端向服务器发送消息后台执行do{}while;时websocketClient实参是不同的它与客户端一一对应//同一个客户端向服务器多次发送消息后台执行do{}while;时websocketClient实参是相同的clientData await websocketClient.WebSocket.ReceiveAsync(new ArraySegmentbyte(buffer), CancellationToken.None);if (clientData.MessageType WebSocketMessageType.Text !clientData.CloseStatus.HasValue){var msgString Encoding.UTF8.GetString(buffer);var message JsonConvert.DeserializeObjectMessage(msgString);message.SendClientId websocketClient.Id;HandleMessage(message);}} while (!clientData.CloseStatus.HasValue);//关掉使用WebSocket连接的网页/调用webSocket.close()后与之对应的后台会跳出循环WebsocketClientCollection.Remove(websocketClient);}private void HandleMessage(Message message){var client WebsocketClientCollection.Get(message.SendClientId);switch (message.action){case join:client.RoomNo message.roomNo;client.SendMessageAsync(${message.nick} join room {client.RoomNo} success .);break;case send_to_room:if (string.IsNullOrEmpty(client.RoomNo)){break;}var clients WebsocketClientCollection.GetClientsByRoomNo(client.RoomNo);clients.ForEach(c {c.SendMessageAsync(message.nick : message.msg);});break;case leave:#region 通过把连接的RoomNo置空模拟关闭连接var roomNo client.RoomNo;client.RoomNo ;#endregion#region 后台关闭连接//client.WebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, , CancellationToken.None);//WebsocketClientCollection.Remove(client); #endregionclient.SendMessageAsync(${message.nick} leave room {roomNo} success .);break;default:break;}}} }Program.cs中的核心代码使用Websocket var app builder.Build();#region 配置中间件使用websocketapp.UseWebSockets(new WebSocketOptions{KeepAliveInterval TimeSpan.FromSeconds(60),ReceiveBufferSize 1 * 1024});app.UseWebsocketHandlerMiddleware(); #endregion 聊天室HTML页面代码 !DOCTYPE html html headmeta charsetutf-8 /title简易websocket聊天室应用/title /head bodydiv stylemargin-bottom:5px;房间号: input typetext idtxtRoomNo value99999 /button idbtnJoin加入房间/buttonbutton idbtnLeave离开房间/buttonbutton idbtnDisConnect断开链接/button/divdiv stylemargin-bottom:5px;我的昵称: input typetext idtxtNickName valueniunan //divdiv styleheight:300px;width:600pxtextarea styleheight:100%;width:100% idmsgList/textareadiv styletext-align: rightinput typetext idtxtMsg value placeholder请输入您要发送的文本消息 / button idbtnSend发送/button/div/divscript srclib/jquery/dist/jquery.min.js/scriptscriptvar webSocket new WebSocket(ws://localhost:5160/ws);//前台向后台发送连接请求后台成功接收并建立连接后才会触发此事件webSocket.onopen function (event) {console.log(Connection opened...);$(#msgList).val(WebSocket connection opened);};//后台向前台发送消息前台成功接收后会触发此事件webSocket.onmessage function (event) {console.log(Received message: event.data);if (event.data) {var content $(#msgList).val();content content \r\n event.data;$(#msgList).val(content);}};//后台关闭连接后/前台关闭连接后都会触发此事件webSocket.onclose function (event) {console.log(Connection closed...);var content $(#msgList).val();content content \r\nWebSocket connection closed;$(#msgList).val(content);};$(#btnJoin).on(click, function () {var roomNo $(#txtRoomNo).val();var nick $(#txtNickName).val();if (!roomNo) {alert(请输入RoomNo);return;}var msg {action: join,roomNo: roomNo,nick: nick};if (CheckWebSocketConnected(webSocket)) {webSocket.send(JSON.stringify(msg));}});$(#btnSend).on(click, function () {var message $(#txtMsg).val();var nick $(#txtNickName).val();if (!message) {alert(请输入发生的内容);return;}if (CheckWebSocketConnected(webSocket)) {webSocket.send(JSON.stringify({action: send_to_room,msg: message,nick: nick}));}});$(#btnLeave).on(click, function () {var nick $(#txtNickName).val();var msg {action: leave,roomNo: ,nick: nick};if (CheckWebSocketConnected(webSocket)) {webSocket.send(JSON.stringify(msg));}});$(#btnDisConnect).on(click, function () {if (CheckWebSocketConnected(webSocket)) {//部分浏览器调用close()方法关闭WebSocket时不支持传参//webSocket.close(001, closeReason);webSocket.close();}});//判断当前websocket的状态/*CONNECTING值为0表示正在连接。OPEN值为1表示连接成功可以通信。CLOSING值为2表示连接正在关闭。CLOSED值为3表示连接已经关闭或者打开连接失败。*/function CheckWebSocketConnected(ws) {var b false;switch (ws.readyState) {case WebSocket.CONNECTING: // 也可以用0// do somethingbreak;case WebSocket.OPEN: // 也可以用1// do somethingb true;break;case WebSocket.CLOSING: // 也可以用2// do somethingbreak;case WebSocket.CLOSED: // 也可以用3// do somethingbreak;default:// this never happensbreak;}return b;}/script /body /html
http://www.tj-hxxt.cn/news/218108.html

相关文章:

  • 微信移动网站建设小程序开发公司排行
  • 大连网站开发需要多少钱大气 网站源码
  • 网站排名优化化快排优化软件汇
  • 深圳网站建设知了网络360收录
  • 建设银行网站怎么登陆不了网站要和别人做api 链接
  • 网站logo织梦怎么做微信公众号开发网站开发
  • 做运营必知网站建站工具官网
  • 湘潭做网站 磐石网络优质php网站建设全程解析
  • 三门网站制作destoon做众筹网站
  • 福永外贸网站建设公司焊工培训心得体会
  • 个人电脑建立网站免费学编程的app
  • 用网站制作自己app软件如何做个人网站
  • 东莞手机端建站模板东莞常平汽车站时刻表
  • 网站建设要费用多少asp网站怎么做301
  • 中石油第六建设公司网站主机 可以 多少 网站
  • 东莞整站排名汉滨区建设局网网站
  • 淘宝网站官网网页毕业设计说明书
  • 加强单位门户网站建设的通知app开发公司哪个公司好
  • 网站设计技术wordpress 微博 链接地址
  • 金融公司网站免费模板国内最好的危机公关公司
  • 网站制作的报价大约是多少网站打不开dns修改
  • 自己怎么建立个人网站做互助盘网站
  • 浙江个人网站备案孝感门户网
  • 网站设计收集上海比较好的装修公司
  • 北京网站建站模板网络搭建是什么工作
  • 企业网站建站方案网站维护费计入什么科目
  • 什么是网站静态页面php做直播类型的网站
  • 做我女朋网站源码知识付费网站建设
  • 建设网站用户名是什么推广app赚佣金平台
  • 网站开发用什么软件seo网站页面f布局