欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java中使用websocket實(shí)現(xiàn)在線聊天功能

很早以前為了快速達(dá)到效果,使用輪詢實(shí)現(xiàn)了在線聊天功能,后來無意接觸了socket,關(guān)于socket我的理解是進(jìn)程間通信,首先要有服務(wù)器跟客戶端,服務(wù)的啟動監(jiān)聽某ip端口定位該進(jìn)程,客戶端開啟socket分配ip端口連接服務(wù)端ip端口,于是兩個(gè)進(jìn)程間便可以通信了。下面簡單畫個(gè)圖理解。

為鐘樓等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及鐘樓網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站制作、成都網(wǎng)站建設(shè)、鐘樓網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

Java中使用websocket實(shí)現(xiàn)在線聊天功能 

but,今天還是準(zhǔn)備分享websocket的使用,先上效果,再貼代碼。

第一步啟動socket服務(wù)。

Java中使用websocket實(shí)現(xiàn)在線聊天功能 

然后連接客戶端連接服務(wù)器,加入聊天室,分別使用googel(白玉京,沈浪),火狐(楚留香),ie(李尋歡)進(jìn)行測試,效果如下。

Java中使用websocket實(shí)現(xiàn)在線聊天功能 

*

*****************斷開一下。

Java中使用websocket實(shí)現(xiàn)在線聊天功能 

******************斷開一下。

Java中使用websocket實(shí)現(xiàn)在線聊天功能 

下面是本次測試源碼。

服務(wù)端:

 public class TestWebSocketController : Controller
  {
    WebSocketServer server;
    List<SessionInfo> listSession = new List<SessionInfo>();
    public ActionResult Index()
    {
      return View();
    }
    //服務(wù)啟動
    public string Start()
    {
      var ip = "192.168.1.106";
      var port = "1010";
      server = new WebSocketServer();
      if (!server.Setup(ip, int.Parse(port)))
      {
        return "WebSocket服務(wù)啟動Error";
      }
      //新的會話連接
      server.NewSessionConnected += SessionConnected;
      //會話關(guān)閉
      server.SessionClosed += SessionClosed;
      //新的消息接收
      server.NewMessageReceived += MessageReceived;
      if (!server.Start())
      {
        //處理監(jiān)聽失敗消息
        return "error";
      }
      return "success";
    }
    /// <summary>
    /// 會話關(guān)閉
    /// </summary>
    /// <param name="session"></param>
    /// <param name="value"></param>
    private void SessionClosed(WebSocketSession session, SuperSocket.SocketBase.CloseReason value)
    {
      Debug.WriteLine("會話關(guān)閉,關(guān)閉原因:{0} 來自:{1} 時(shí)間:{2:HH:MM:ss}", value, session.RemoteEndPoint, DateTime.Now);
      //SendMsgToRemotePoint(SessionId, SessionId + "已斷開");
      var sessionRemove = listSession.FirstOrDefault(s => s.SessionId == session.SessionID);
      listSession.Remove(sessionRemove);
    }
    /// <summary>
    /// 會話連接
    /// </summary>
    /// <param name="session"></param>
    private void SessionConnected(WebSocketSession session)
    {
      Debug.WriteLine("新的會話連接 來自:{0} SessionID:{1} 時(shí)間:{2:HH:MM:ss}", session.RemoteEndPoint, session.SessionID, DateTime.Now);
      listSession.Add(new SessionInfo { SessionId = session.SessionID, EndPoint = session.RemoteEndPoint.ToString() });
    }
    /// <summary>
    /// 消息接收
    /// </summary>
    /// <param name="session"></param>
    /// <param name="value"></param>
    private void MessageReceived(WebSocketSession session, string value)
    {
      //反序列化消息內(nèi)容
      var message = JsonConvert.DeserializeObject<MessageInfo>(value);
      foreach (var item in listSession)
      {
        ///發(fā)送消息
        SendMsg(item.SessionId, string.Format("{0}發(fā)來消息:{1}", message.Name, message.Message));
      }
    }
    // <summary>
    /// 發(fā)送消息
    /// </summary>
    /// <param name="sessionId"></param>
    /// <param name="msg"></param>
    private void SendMsg(string sessionId, string msg)
    {
      var appSession = server.GetAppSessionByID(sessionId);
      if (appSession != null)
        appSession.Send(msg);
    }
    public class MessageInfo
    {
      public string Name { get; set; }
      public string Message { get; set; }
    }
    public class SessionInfo
    {
      public string SessionId { get; set; }
      public string EndPoint { get; set; }
      //public string Name { get; set; }
    }
  }

客戶端:

@{
  ViewBag.Title = "Index";
}
<h3>Index</h3>
<script src="../Scripts/jquery-1.8.2.js"></script>
<input type="text" id="txtName" />
<input type="button" value="加入聊天室" id="btnConnection" />
<input type="button" value="離開聊天室" id="btnDisConnection" />
<input type="text" id="txtInput" />
<input type="button" value="發(fā)送" id="btnSend" />
<div id="msg"></div>
<script language="javascript" type="text/javascript">
  var ws;
  var url = "ws://192.168.1.106:1010"
  $("#btnConnection").click(function () {
    if ("WebSocket" in window) {
      ws = new WebSocket(url);
    }
    else if ("MozWebSocket" in window) {
      ws = new MozWebSocket(url);
    }
    else
      alert("瀏覽器版本過低,請升級您的瀏覽器");
    //注冊各類回調(diào)
    ws.onopen = function () {
      $("#msg").append($("#txtName").val() + "加入聊天室<br />");
    }
    ws.onclose = function () {
      $("#msg").append($("#txtName").val() + "離開聊天室<br />");
    }
    ws.onerror = function () {
      $("#msg").append("數(shù)據(jù)傳輸發(fā)生錯誤<br />");
    }
    ws.onmessage = function (receiveMsg) {
      $("#msg").append(receiveMsg.data + "<br />");
    }
    //監(jiān)聽窗口關(guān)閉事件,當(dāng)窗口關(guān)閉時(shí),主動去關(guān)閉websocket連接,防止連接還沒斷開就關(guān)閉窗口,server端會拋異常。
    window.onbeforeunload = function () {
      ws.close();
    }
  });
  //$("#btnDisConnection").click(function () {
  //  $("#msg").append($("#txtName").val() + "離開聊天室<br />");
  //  ws.close();
  //});
  $("#btnSend").click(function () {
    if (ws.readyState == WebSocket.OPEN) {
      var message = "{\"name\":\"" + $("#txtName").val() + "\",\"message\":\"" + $("#txtInput").val() + "\"}";
      ws.send(message);
    }
    else {
      $("#msg").text("Connection is Closed!");
    }
  });
</script>

總結(jié)

以上所述是小編給大家介紹的Java中使用websocket實(shí)現(xiàn)在線聊天功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!

分享名稱:Java中使用websocket實(shí)現(xiàn)在線聊天功能
文章源于:http://chinadenli.net/article32/gojssc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)網(wǎng)站導(dǎo)航網(wǎng)站制作網(wǎng)站改版網(wǎng)站營銷

廣告

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

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)