Java中使用websocket实现在线聊天功能

网友投稿 497 2023-02-16


Java中使用websocket实现在线聊天功能

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

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

第一步启动socket服务。

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

*

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

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

下面是本次测试源码。

服务端:

public class TestWebSocketController : Controller

{

WebSocketServer server;

Listhttp:// 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; }

}

}

客户端:

@{

ViewBag.Title = "Index";

}

总结

以上所述是给大家介绍的Java中使用websocket实现在线聊天功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot整合Shiro实现登录认证的方法
下一篇:Angular 向组件传递模板的两种方法
相关文章

 发表评论

评论列表

2024-08-09 12:19:41

您的文字充满智慧,让人在阅读中获得启发。叙事精彩,情节引人入胜。https://www.ek03.com/ek03/11142.html