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

  

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

  

癑ava中使用websocket实现在线聊天功能”,

  

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

  

第一步启动插座服务。

  

癑ava中使用websocket实现在线聊天功能”,

  

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

  

癑ava中使用websocket实现在线聊天功能”,

  

*   

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

  

癑ava中使用websocket实现在线聊天功能”,

  

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

  

癑ava中使用websocket实现在线聊天功能”,

  

下面是本次测试源码。

  

服务端:

        公共类TestWebSocketController:控制器   {   WebSocketServer服务器;   ListlistSession=new List ();   公共ActionResult指数()   {   返回视图();   }//服务启动   公共字符串Start ()   {   var ip=" 192.168.1.106”;   var端口=" 1010 ";   服务器=new WebSocketServer ();   如果(!服务器。设置(ip, int.Parse(端口)))   {   返回“WebSocket服务启动错误”;   }//新的会话连接   服务器。NewSessionConnected +=SessionConnected;//会话关闭   服务器。SessionClosed +=SessionClosed;//新的消息接收   服务器。NewMessageReceived +=MessageReceived;   如果(! server.Start ())   {//处理监听失败消息   返回“错误”;   }   返回“成功”;   }///& lt; summary>///会话关闭///& lt;/summary>///& lt;参数name=盎峄啊弊4? lt;/param>///& lt;参数name=value祝辞& lt;/param>   私人空间SessionClosed (WebSocketSession会话,SuperSocket.SocketBase。CloseReason值)   {   调试。WriteLine(“会话关闭,关闭原因:{0}来自:{1}时间:{2:HH: MM: ss}”,价值,会话。RemoteEndPoint DateTime.Now);//SendMsgToRemotePoint (SessionId SessionId +”已断开”);   var sessionRemove=listSession。FirstOrDefault (s=比;年代。SessionId==session.SessionID);   listSession.Remove (sessionRemove);   }///& lt; summary>///会话连接///& lt;/summary>///& lt;参数name=盎峄啊弊4? lt;/param>   私人空间SessionConnected (WebSocketSession会话)   {   调试。WriteLine(“新的会话连接来自:{0}SessionID:{1}时间:{2:HH: MM: ss}”,会话。RemoteEndPoint、会话。SessionID DateTime.Now);   listSession。添加(新SessionInfo {SessionId=会话。SessionID端点=session.RemoteEndPoint.ToString ()});   }///& lt; summary>///消息接收///& lt;/summary>///& lt;参数name=盎峄啊弊4? lt;/param>///& lt;参数name=value祝辞& lt;/param>   私人空间MessageReceived (WebSocketSession会话,字符串值)   {//反序列化消息内容   var消息=JsonConvert.DeserializeObject(价值);   foreach (var listSession项)   {///发送消息   SendMsg(项目。SessionId,字符串。格式(“{0}发来消息:{1}”,消息。名字,message.Message));   }   }//& lt; summary>///发送消息///& lt;/summary>///& lt;参数name=" sessionId祝辞& lt;/param>///& lt;参数name=拔毒弊4? lt;/param>   sessionId私人空白SendMsg(字符串,字符串味精)   {   var appSession=server.GetAppSessionByID (sessionId);   如果(appSession !=null)   appSession.Send(味精);   }   公开课MessageInfo   {   公共字符串名称{;设置;}   公共字符串消息{;设置;}   }   公开课SessionInfo   {   公共字符串SessionId{得到;设置;}   公共弦端点{得到;设置;}//公共字符串名称{得到;设置;}   }   }      

  

客户端:

        @ {   ViewBag。Title=爸甘?   }   & lt; h3> Index   & lt;脚本src=" https://www.yisu.com/Scripts/jquery-1.8.2.js "祝辞& lt;/script>   & lt;输入类型="文本" id=" txtName "/比;   & lt;输入类型="按钮" value=" https://www.yisu.com/zixun/加入聊天室" id=" btnConnection "/比;   & lt;输入类型="按钮" value=" https://www.yisu.com/zixun/离开聊天室" id=" btnDisConnection "/比;   & lt;输入类型="文本" id=" txtInput "/比;   & lt;输入类型="按钮" value=" https://www.yisu.com/zixun/发送" id=" btnSend "/比;   & lt; div id=拔毒弊4? lt;/div>   & lt;脚本语言=" javascript " type=" text/javascript祝辞   var ws;   var url=" ws://192.168.1.106:1010 "   $ (" # btnConnection”)。点击(函数(){   如果(“WebSocket”窗口){   ws=new WebSocket (url);   }   else if (“MozWebSocket”窗口){   ws=new MozWebSocket (url);   }   其他的   警报(“浏览器版本过低,请升级您的浏览器”);//注册各类回调   ws。onopen=function () {   $(" #味精”).append ($ (" # txtName ") .val() +“加入聊天室& lt; br/祝辞”);   }   ws。onclose=function () {   $(" #味精”).append ($ (" # txtName ") .val() +“离开聊天室& lt; br/祝辞”);   }   ws。onerror=function () {   $(" #味精”).append(“数据传输发生错误& lt; br/祝辞”);   }   ws。onmessage=函数(receiveMsg) {   $(" #味精”).append (receiveMsg。数据+“& lt; br/祝辞”);   }//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,服务器端会抛异常。   窗口。onbeforeunload=function () {   ws.close ();   }   });//$ (" # btnDisConnection”)。点击(函数(){//$(" #味精”).append ($ (" # txtName ") .val() +“离开聊天室& lt; br/祝辞”);//ws.close ();//});   $ (" # btnSend”)。点击(函数(){   如果(ws。readyState==WebSocket.OPEN) {   消息var=" {\ \”: \ " + $ (" # txtName ") .val() +“\”, \“消息\”:\ " + $ (" # txtInput ") .val () + " \ "} ";   null   null   null   null   null   null   null   null   null   null

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