JS代码
//数据返回回调方法
function cmtData(data){
switch(data.event){
case "init":
$("#status").html("init...");
var userlist = data.list;
if(userlist){
for(var i=0;i<userlist.length;i++){
$("#userlist").append("<a id='user_"+userlist[i].sid+"' href='javascript:void();' onclick='toidclick(this);'>" + userlist[i].nickname + "<br><a>");
}
}
break;
case "quit":
$("#ret_msg").append(data.nickname +"离开聊天室!<br>");
$("#userlist #user_"+data.sid).remove();
break;
case "message":
$("#ret_msg").append(data.nickname +"_say:"+ data.msg + "("+data.time+")<br>");
break;
case "join":
$("#ret_msg").append(data.nickname +"加入聊天室!<br>");
$("#userlist").append("<a id='user_"+data.sid+"' href='javascript:void();' onclick='toidclick(this);'>" + data.nickname + "<br><a>");
break;
}
}
//系统调用初始化
function cmtInit(){
connect();
}
//连接后调用
function cmtConnected(){
CMT.post('{"event":"login","nickname":"'+$("#nick").val()+'"}');
}
/////////////////////////////////
function toidclick(e){
$("#toid").val(e.id.substring(5));
}
function connect(){
var nick = $("#nick").val();
if(nick==''){
alert('名称不能为空!');
}else{
CMT.connect();
}
}
function logout(){
CMT.post('{"event":"quit"}');
$("#userlist").html('');
$("#status").html("nostatus...");
}
function send(){
if(CMT.isconnected()){
var data = '{"event":"message","msg":"'+$("#message").val()+'","toid":"'+$("#toid").val()+'"}';
CMT.post(data);
$("#message").val('');
}else{
alert('请先点login按钮!');
}
}
var CMT = {};
(function(cmt,$){
cmt.init = function(){
var cmttaget = $("<div id=\"flash_content\" style=\"position: absolute;top: -1000px;left: -1000px\"></div>");
$("body").append(cmttaget);
//init swf
var swf = new SWFObject("cmt.swf", "__cmt", "25", "25", "7", "#336699");
swf.addParam("quality", "low");
swf.addParam("wmode", "transparent");
swf.addParam("salign", "t");
swf.addParam("allowscriptaccess","always");
swf.write("flash_content");
}
cmt.thisMovie = function(movieName){
if (window.document[movieName]){
return window.document[movieName];
}
if (navigator.appName.indexOf("Microsoft Internet")==-1){
if (document.embeds && document.embeds[movieName])
return document.embeds[movieName];
}
else{ // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
return document.getElementById(movieName);
}
}
cmt.isconnected = function(){
var isconnected = cmt.getCmt().isconnected();
return isconnected;
}
cmt.getCmt = function(){
return cmt.thisMovie("__cmt");
}
cmt.connect = function(){
if(!cmt.isconnected())
cmt.getCmt().connect('127.0.0.1',110);
else
alert("已与服务器连接!");
}
cmt.post = function(data){
if(cmt.isconnected())
cmt.getCmt().post(data);
else
alert("与服务器未连接!");
}
})(CMT,jQuery)
//////////////////////////
$(function(){
CMT.init();
});
此简易服务器消息处理代码
logger.info(">>>>>>>>>>>>>>>>>message");
ASObject message = context.getMessage();
mcManager = context.getMcManager();
Object toid = message.get("toid");
Result result = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
CharacterMC mc = mcManager.get(context.getSession());
Map data = new HashMap();
data.put("event", "message");
data.put("sid", context.getSid());
data.put("msg", message.get("msg"));
data.put("nickname",mc.getNickname());
data.put("time", sdf.format(new Date()));
if(toid == null || "".equals(toid)){
result = new BroadCastResult(data);
}else{
result = new SubscribeResult(data,new Long[]{Long.parseLong((String)toid)},true);
}
context.addResult(result);
欢印大家给我留言改进设计
分享到:
相关推荐
文件"MinaSocket"可能包含了实现上述功能的详细代码,包括服务端的Acceptor配置、过滤器设置、事件处理器编写,以及客户端的Socket连接、数据发送和接收等。通过阅读和理解这些代码,你可以更好地掌握Mina与Socket...
在IT行业中,网络编程是不可或缺的一部分,而Socket通信则是实现网络连接的基础。本文将通过一个对比实例,探讨一般Socket客户端与Mina NIO (Non-blocking I/O) Socket客户端的差异和特点,帮助开发者理解这两种技术...
在这个"网络编程(socket、NIO、mina)---demo"的主题中,我们将深入探讨三个关键概念:Socket编程、非阻塞I/O(Non-blocking I/O,简称NIO)以及Apache Mina框架。这些技术广泛应用于构建高性能、高并发的网络应用...
Socket长连接是网络编程中的重要概念,主要用于保持客户端与服务器之间的持续通信状态,避免每次通信都需要重新建立连接的开销。在长连接中,一旦连接建立成功,就会保持该连接,直到某一方主动断开或者因为网络问题...
使用NIO socket不需要多线程来处理多个连接的请求,效率非常高 可以作为NIO socket入门的例子,Reactor模式,重点理解key.attach, jar文件里包含了源代码 1,运行server.bat启动服务器,可以打开编辑,修改端口号 ...
在本篇博文中,我们将深入探讨如何利用Apache MINA库实现基于TLS/SSL的NIO(非阻塞I/O)Socket通信。MINA是一个高度可扩展的网络应用框架,广泛用于构建高性能、高并发的网络应用程序,如服务器端的TCP和UDP服务。...
- **关闭策略**:合理设置超时时间,当连接长时间无数据传输时,可以考虑关闭连接以释放资源。 **4. 应用场景** 短连接适合一次性、低延迟、资源有限的场景,如网页浏览。而长连接适合实时性强、需要持续交互的...
**Android-MinaSocket:基于Mina的高效Socket长连接库** 在移动应用开发中,尤其是Android平台,实时性与稳定性是许多应用场景的核心需求,比如在线游戏、即时通讯、物联网设备等。在这种背景下,使用Socket进行长...
`Socket`在NIO中的实现是`SocketChannel`,它代表了网络上的一个连接。`ServerSocketChannel`则用于监听客户端的连接请求。通过`ServerSocketChannel`的`accept()`方法,服务器可以接收新的客户端连接,然后将其注册...
总结来说,Socket通信是网络编程的基础,而MINA长连接则是Socket通信的一种优化实现,尤其适合需要高效处理大量并发连接和实时数据交换的场景。在实际开发中,你可以根据项目需求选择适合的技术栈,例如使用MINA来...
在Java世界中,网络编程是一个不可或缺的部分,而Mina NIO(Non-blocking I/O)Socket库则是Java开发者实现高性能、高并发网络服务的重要工具。本文将深入探讨Mina NIO Socket的核心概念、工作原理以及在实际项目中...
NioSocket是一个基于Java NIO(非阻塞I/O)技术实现的网络通信框架,它包含服务器端(Server)和客户端(Client)两部分。在Java编程中,NIO(New Input/Output)提供了一种不同于传统IO模型的I/O操作方式,其核心...
本项目"基于nio的简易聊天室"旨在通过NIO技术实现一个简单的聊天室服务端和客户端,其特点是有图形用户界面(GUI)供用户交互。 NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。在这...
### Java NIO 实现Socket通信详解 #### 一、NIO与传统IO的区别及优势 在探讨如何使用Java NIO实现Socket通信之前,我们需要先理解NIO(Non-blocking I/O,非阻塞I/O)与传统阻塞I/O之间的区别。 **传统阻塞I/O...
NIO在Java 1.4版本引入,其设计目标是提供一种更高效、更灵活的I/O操作方式,特别适合处理大量并发连接的场景,如服务器端编程。在NIO中,我们不再像BIO那样等待一个操作完成,而是通过选择器(Selector)监控多个...
Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...
利用socketNIO实现的多客户端聊天室,非阻塞式IO,java代码编写,使用方法:先启动服务端代码再启动客户端代码,可启动多个客户端代码。若使用多个电脑启动客户端,需在客户端代码中更改一下ip地址。
综上所述,MINA长连接框架在实现服务器与Android客户端通讯时,涉及到网络编程、数据传输协议、异常处理、过滤器机制、长连接维护等多个技术要点,开发者需要根据实际需求进行合理的架构设计和优化。通过MINA提供的...
NIO (Non-blocking Input/Output) 是Java中的一种I/O模型,与传统的 blocking I/O 相比,它提供了更高效的数据处理...对于需要处理大量并发连接的网络应用,如聊天服务器、游戏服务器等,NIO 和 MINA 是理想的选择。