欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何制作NetCoreWebSocket即時(shí)通訊

這篇文章主要為大家展示了“如何制作NetCore WebSocket即時(shí)通訊”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何制作NetCore WebSocket即時(shí)通訊”這篇文章吧。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的南部網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

NetCore WebSocket 即時(shí)通訊示例,供大家參考,具體內(nèi)容如下

1.新建Netcore Web項(xiàng)目

如何制作NetCore WebSocket即時(shí)通訊

2.創(chuàng)建簡易通訊協(xié)議

public class MsgTemplate
 {
 public string SenderID { get; set; }
 public string ReceiverID { get; set; }
 public string MessageType { get; set; }
 public string Content { get; set; }
 }

SenderID發(fā)送者ID

ReceiverID 接受者ID

MessageType 消息類型  Text  Voice 等等

Content 消息內(nèi)容

3.添加中間件ChatWebSocketMiddleware

public class ChatWebSocketMiddleware
 {
 private static ConcurrentDictionary<string, System.Net.WebSockets.WebSocket> _sockets = new ConcurrentDictionary<string, System.Net.WebSockets.WebSocket>();

 private readonly RequestDelegate _next;

 public ChatWebSocketMiddleware(RequestDelegate next)
 {
  _next = next;
 }

 public async Task Invoke(HttpContext context)
 {
  if (!context.WebSockets.IsWebSocketRequest)
  {
  await _next.Invoke(context);
  return;
  }
  System.Net.WebSockets.WebSocket dummy;

  CancellationToken ct = context.RequestAborted;
  var currentSocket = await context.WebSockets.AcceptWebSocketAsync();
  //string socketId = Guid.NewGuid().ToString();
  string socketId = context.Request.Query["sid"].ToString();
  if (!_sockets.ContainsKey(socketId))
  {
  _sockets.TryAdd(socketId, currentSocket);
  }
  //_sockets.TryRemove(socketId, out dummy);
  //_sockets.TryAdd(socketId, currentSocket);

  while (true)
  {
  if (ct.IsCancellationRequested)
  {
   break;
  }

  string response = await ReceiveStringAsync(currentSocket, ct);
  MsgTemplate msg = JsonConvert.DeserializeObject<MsgTemplate>(response);

  if (string.IsNullOrEmpty(response))
  {
   if (currentSocket.State != WebSocketState.Open)
   {
   break;
   }

   continue;
  }

  foreach (var socket in _sockets)
  {
   if (socket.Value.State != WebSocketState.Open)
   {
   continue;
   }
   if (socket.Key == msg.ReceiverID || socket.Key == socketId)
   {
   await SendStringAsync(socket.Value, JsonConvert.SerializeObject(msg), ct);
   }
  }
  }

  //_sockets.TryRemove(socketId, out dummy);

  await currentSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", ct);
  currentSocket.Dispose();
 }

 private static Task SendStringAsync(System.Net.WebSockets.WebSocket socket, string data, CancellationToken ct = default(CancellationToken))
 {
  var buffer = Encoding.UTF8.GetBytes(data);
  var segment = new ArraySegment<byte>(buffer);
  return socket.SendAsync(segment, WebSocketMessageType.Text, true, ct);
 }

 private static async Task<string> ReceiveStringAsync(System.Net.WebSockets.WebSocket socket, CancellationToken ct = default(CancellationToken))
 {
  var buffer = new ArraySegment<byte>(new byte[8192]);
  using (var ms = new MemoryStream())
  {
  WebSocketReceiveResult result;
  do
  {
   ct.ThrowIfCancellationRequested();

   result = await socket.ReceiveAsync(buffer, ct);
   ms.Write(buffer.Array, buffer.Offset, result.Count);
  }
  while (!result.EndOfMessage);

  ms.Seek(0, SeekOrigin.Begin);
  if (result.MessageType != WebSocketMessageType.Text)
  {
   return null;
  }

  using (var reader = new StreamReader(ms, Encoding.UTF8))
  {
   return await reader.ReadToEndAsync();
  }
  }
 }
 }

控制只有接收者才能收到消息

if (socket.Key == msg.ReceiverID || socket.Key == socketId)
{
 await SendStringAsync(socket.Value,JsonConvert.SerializeObject(msg), ct);
}

4.在Startup.cs中使用中間件

app.UseWebSockets();
app.UseMiddleware<ChatWebSocketMiddleware>();

5.建立移動(dòng)端測試示例 這里采用Ionic3運(yùn)行在web端

創(chuàng)建ionic3項(xiàng)目略過 新手可點(diǎn)這里查看  或者有Angular2/4項(xiàng)目竟然可直接往下看

(1) 啟動(dòng)Ionic項(xiàng)目

如何制作NetCore WebSocket即時(shí)通訊

當(dāng)初創(chuàng)建ionic3項(xiàng)目時(shí)候遇到不少問題

比如ionic-cli初始化項(xiàng)目失敗 切換到默認(rèn)npmorg源就好了

比如ionic serve失敗 打開代理允許FQ就好了

啟動(dòng)后界面是這樣式的

如何制作NetCore WebSocket即時(shí)通訊

(2) 創(chuàng)建聊天窗口dialog 具體布局實(shí)現(xiàn) 模塊加載略過直接進(jìn)入websocket實(shí)現(xiàn)

在這之前別忘了啟動(dòng)web項(xiàng)目 否則會(huì)出現(xiàn)這樣情況 鏈接不到服務(wù)

如何制作NetCore WebSocket即時(shí)通訊

(3)dialog.ts具體實(shí)現(xiàn)

export class Dialog {

 private ws: any;
 private msgArr: Array<any>;

 constructor(private httpService: HttpService) {

 this.msgArr = [];
 }

 ionViewDidEnter() {
 if (!this.ws) {
  this.ws = new WebSocket("ws://localhost:56892?sid=222");

  this.ws.onopen = () => {
  console.log('open');
  };

  this.ws.onmessage = (event) => {
  console.log('new message: ' + event.data);
  var msgObj = JSON.parse(event.data);
  this.msgArr.push(msgObj);;
  };

  this.ws.onerror = () => {
  console.log('error occurred!');
  };

  this.ws.onclose = (event) => {
  console.log('close code=' + event.code);
  };
 }
 }

 sendMsg(msg) {//msg為我要發(fā)送的內(nèi)容 比如"hello world"
 var msgObj = {
  SenderID: "222",
  ReceiverID: "111",
  MessageType: "text",
  Content: msg
 };
 this.ws.send(JSON.stringify(msgObj));
 }

ws://localhost:56892?sid=222 這是websocke服務(wù)鏈接地址
sid表示著我這個(gè)端的WebSocke唯一標(biāo)識(shí)  找到這個(gè)key就可以找到我這個(gè)用戶端了

6.在web端也實(shí)現(xiàn)一個(gè)會(huì)話窗口

<p class="container" style="width:90%;margin:0px auto;border:1px solid steelblue;">
 <p class="msg">
 <p id="msgs" style="height:200px;"></p>
 </p>

 <p style="display:block;width:100%">
 <input type="text" style="max-width:unset;width:100%;max-width:100%" id="MessageField" placeholder="type message and press enter" />
 </p>
</p>
<script>
 $(function () {
  $('.navbar-default').addClass('on');

  var userName = '@Model';

  var protocol = location.protocol === "https:" ? "wss:" : "ws:";
  var wsUri = protocol + "//" + window.location.host + "?sid=111";
  var socket = new WebSocket(wsUri);
  socket.onopen = e => {
  console.log("socket opened", e);
  };

  socket.onclose = function (e) {
  console.log("socket closed", e);
  };

  socket.onmessage = function (e) {
  console.log(e);
  var msgObj = JSON.parse(e.data);
  $('#msgs').append(msgObj.Content + '<br />');
  };

  socket.onerror = function (e) {
  console.error(e.data);
  };

  $('#MessageField').keypress(function (e) {
  if (e.which != 13) {
   return;
  }

  e.preventDefault();

  var message = $('#MessageField').val();

  var msgObj = {
   SenderID:"111",
   ReceiverID:"222",
   MessageType: "text",
   Content: message
  };
  socket.send(JSON.stringify(msgObj));
  $('#MessageField').val('');
  });
 });
 </script>

基本開發(fā)完成 接下來看看效果

7.web和webapp端對(duì)話

如何制作NetCore WebSocket即時(shí)通訊

如何制作NetCore WebSocket即時(shí)通訊

8.webapp發(fā)送 web接收

如何制作NetCore WebSocket即時(shí)通訊

如何制作NetCore WebSocket即時(shí)通訊

以上是“如何制作NetCore WebSocket即時(shí)通訊”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

本文名稱:如何制作NetCoreWebSocket即時(shí)通訊
URL鏈接:http://aaarwkj.com/article44/ipdihe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作、網(wǎng)站排名、軟件開發(fā)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
国产精品一久久香蕉产线看| 老湿机午夜在线免费观看| 青青草日韩视频在线观看| 国产无遮挡的免费视频| 97水蜜桃视频在线观看| 亚洲精品网站国产高清| 亚州无吗一区二区三区| 密臀精品国产一区二区| 真做的欧美三级在线观看| 蜜桃传媒18传媒在线| 日韩高清有码一区二区| 亚洲一区二区美女av| 色花堂国产精品第二页| 国产三级国产精品国产专播| 色婷婷精品二区久久蜜臀av| 老牛av一区二区三区| 国产精品一区二区剧情熟女| 日韩免费高清不卡视频| 国产剧情av一区在线观看| 伊人激情久久综合中文字幕| 欧美另类精品一区二区| 国产精品久久综合网| 国产又粗又猛又爽黄老大爷| 91精品国产综合久久男男| 久激情内射婷内射蜜桃| 中文字幕制服日韩久久一区| 久久国产欧美日韩精品免费| 欧美午夜一级特黄大片| 亚洲女同中文字幕在线| 人妻少妇中文字幕在线播放| 久久精品国产亚洲av高清综合| 欧美日韩精品人妻二区| 欧美黄片高清免费播放| 亚洲欧美一区二区三区三| 日韩av网址在线免费观看| 男女激情视频久久精品| 亚洲国产中文日韩欧美在线| 91蜜臀视频在线播放| 精品一区中文字幕少妇人妻| 欧美亚日韩精品视频| 国产精品欧美久久久久无|