资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

Java中使用websocket实现在线聊天功能-创新互联

很早以前为了快速达到效果,使用轮询实现了在线聊天功能,后来无意接触了socket,关于socket我的理解是进程间通信,首先要有服务器跟客户端,服务的启动监听某ip端口定位该进程,客户端开启socket分配ip端口连接服务端ip端口,于是两个进程间便可以通信了。下面简单画个图理解。

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的灵寿网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

but,今天还是准备分享websocket的使用,先上效果,再贴代码。

第一步启动socket服务。

然后连接客户端连接服务器,加入聊天室,分别使用googel(白玉京,沈浪),火狐(楚留香),ie(李寻欢)进行测试,效果如下。

*

*****************断开一下。

******************断开一下。

下面是本次测试源码。

服务端:

 public class TestWebSocketController : Controller
  {
    WebSocketServer server;
    List listSession = new List();
    public ActionResult Index()
    {
      return View();
    }
    //服务启动
    public string Start()
    {
      var ip = "192.168.1.106";
      var port = "1010";
      server = new WebSocketServer();
      if (!server.Setup(ip, int.Parse(port)))
      {
        return "WebSocket服务启动Error";
      }
      //新的会话连接
      server.NewSessionConnected += SessionConnected;
      //会话关闭
      server.SessionClosed += SessionClosed;
      //新的消息接收
      server.NewMessageReceived += MessageReceived;
      if (!server.Start())
      {
        //处理监听失败消息
        return "error";
      }
      return "success";
    }
    /// 
    /// 会话关闭
    /// 
    /// 
    /// 
    private void SessionClosed(WebSocketSession session, SuperSocket.SocketBase.CloseReason value)
    {
      Debug.WriteLine("会话关闭,关闭原因:{0} 来自:{1} 时间:{2:HH:MM:ss}", value, session.RemoteEndPoint, DateTime.Now);
      //SendMsgToRemotePoint(SessionId, SessionId + "已断开");
      var sessionRemove = listSession.FirstOrDefault(s => s.SessionId == session.SessionID);
      listSession.Remove(sessionRemove);
    }
    /// 
    /// 会话连接
    /// 
    /// 
    private void SessionConnected(WebSocketSession session)
    {
      Debug.WriteLine("新的会话连接 来自:{0} SessionID:{1} 时间:{2:HH:MM:ss}", session.RemoteEndPoint, session.SessionID, DateTime.Now);
      listSession.Add(new SessionInfo { SessionId = session.SessionID, EndPoint = session.RemoteEndPoint.ToString() });
    }
    /// 
    /// 消息接收
    /// 
    /// 
    /// 
    private void MessageReceived(WebSocketSession session, string value)
    {
      //反序列化消息内容
      var message = JsonConvert.DeserializeObject(value);
      foreach (var item in listSession)
      {
        ///发送消息
        SendMsg(item.SessionId, string.Format("{0}发来消息:{1}", message.Name, message.Message));
      }
    }
    // 
    /// 发送消息
    /// 
    /// 
    /// 
    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; }
    }
  }

当前标题:Java中使用websocket实现在线聊天功能-创新互联
文章转载:http://cdkjz.cn/article/ddhecp.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220