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

本文介绍了如何使用Java的WebSocket技术实现在线聊天功能。通过创建WebSocket服务器和客户端,详细展示了连接建立、消息传递及关闭会话的过程。文中还提供了服务端和客户端的代码示例,并使用不同浏览器进行测试,确保兼容性。最后,作者总结了WebSocket在线聊天应用的实现步骤。
摘要由CSDN通过智能技术生成

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

e2a301022bef5703fdafa859ed053230.png

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

第一步启动socket服务。

4caa65e046f7024a87ac7287d208dc26.png

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

06e1c0148b148d49a6f40789af28836a.png

*

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

056ad60cb6265d5534683688bef96170.png

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

8e29f71d60ffc789f0a712d9a76df18c.png

下面是本次测试源码。

服务端:

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; }

}

}

客户端:

@{

ViewBag.Title = "Index";

}

Index

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("浏览器版本过低,请升级您的浏览器");

//注册各类回调

ws.onopen = function () {

$("#msg").append($("#txtName").val() + "加入聊天室
");

}

ws.onclose = function () {

$("#msg").append($("#txtName").val() + "离开聊天室
");

}

ws.onerror = function () {

$("#msg").append("数据传输发生错误
");

}

ws.onmessage = function (receiveMsg) {

$("#msg").append(receiveMsg.data + "
");

}

//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。

window.onbeforeunload = function () {

ws.close();

}

});

//$("#btnDisConnection").click(function () {

// $("#msg").append($("#txtName").val() + "离开聊天室
");

// 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!");

}

});

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值