昨天就了一下glassfish例子 ,与大家分享一下
新建一个servlet:
package org.comet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.enterprise.web.connector.grizzly.comet.CometContext;
import com.sun.enterprise.web.connector.grizzly.comet.CometEngine;
public class CometChat extends HttpServlet
{
/**
* Constructor of the object.
*/
CometEngine engine = null;
CometContext metaContext = null;
public CometChat()
{
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy()
{
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
CometResponseHandler handler = null;
response.setContentType("text/plain");
response.setStatus(HttpServletResponse.SC_OK);
if(request.getRequestURI().equals(request.getContextPath()+"/servlet/CometChat")){
handler = new CometResponseHandler(request.getContextPath()+"/servlet/CometChat");
handler.attach(response);
metaContext.addCometHandler(handler);
}
PrintWriter writer = response.getWriter();
writer.flush();
writer.println("---START---");
writer.flush();
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException
* if an error occurs
*/
public void init() throws ServletException
{
// Put your code here
super.init();
engine = CometEngine.getEngine();
metaContext = engine.register("/servlet/CometChat");
Thread t = new Thread()
{
public int i = 0;
public void run()
{
while (true)
{
try
{
Thread.sleep(10000);
metaContext.notify(new Integer(i++));
}
catch (IOException e)
{
e.printStackTrace();
}
catch (InterruptedException e)
{
e.printStackTrace();
return;
}
}
}
};
t.start();
}
}
然后有一个JavaBean
package org.comet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import com.sun.enterprise.web.connector.grizzly.comet.CometContext;
import com.sun.enterprise.web.connector.grizzly.comet.CometEngine;
import com.sun.enterprise.web.connector.grizzly.comet.CometEvent;
import com.sun.enterprise.web.connector.grizzly.comet.CometHandler;
public class CometResponseHandler implements CometHandler<HttpServletResponse>
{
private HttpServletResponse httpServletResponse;
private String contextPath = null;
public CometResponseHandler(String contextPath)
{
}
public void attach(HttpServletResponse httpServletResponse)
{
this.httpServletResponse = httpServletResponse;
}
public void onEvent(CometEvent event) throws IOException
{
System.out.println("==== onEvent =====");
PrintWriter printWriter = httpServletResponse.getWriter();
printWriter.println("Handler:" + this.toString() + " - event{type:\"" + event.getType() + "\",\""
+ event.attachment().toString() + "\"} IP=");
printWriter.flush();
}
public void onInitialize(CometEvent event) throws IOException
{
System.out.println("==== onInitialize =====");
}
public void onTerminate(CometEvent event) throws IOException
{
System.out.println("==== onTerminate =====");
onInterrupt(event);
}
public void onInterrupt(CometEvent event) throws IOException
{
System.out.println("==== onInterrupt =====");
CometEngine cometEngine = CometEngine.getEngine();
CometContext cometContext = cometEngine.getCometContext(contextPath);
cometContext.removeCometHandler(this);
}
}
deploy在glassfish吧
分享到:
相关推荐
Comet技术则是一种服务器推送技术,它允许服务器向客户端实时推送数据,而无需客户端反复发起请求,常用于实现聊天、股票报价等实时交互应用。 首先,Grizzly框架是Oracle JDK的一部分,它提供了网络I/O处理、协议...
CometD是一个基于Bayeux协议的开源JavaScript库,它实现了服务器推送技术,允许服务器主动向客户端发送数据,而不仅仅是响应客户端的请求。这个“cometd实例demo”提供了使用CometD的一个实际示例,可以帮助开发者...
因此,在实现服务器向客户端推送数据的需求时,开发者不得不采取一些变通方案,包括轮询(Polling)、Comet 和 Piggyback 等技术。 - **轮询(Polling)**:客户端定期向服务器发送请求以获取最新的数据变化。虽然...
Bayeux是一种通用的、跨平台的、JSON格式的消息协议,设计用于实现服务器推送技术,使得服务器能够主动向客户端发送数据,而不仅仅是响应客户端的请求。这种模式在实时应用,如聊天室、实时股票报价、在线游戏等场景...
ChatWebSocket 使用Java和javascript编写的使用websocket技术的聊天应用程序服务器Websocket端点在glassfish服务器中运行。 服务器从客户端接收JSON(字符串)数据。 数据由类ChatDecoder转换为类ChatData。 之后,...
Atmosphere旨在解决AJAX长轮询、Comet等技术的问题,提供了一种统一的方式来处理服务器推送技术。Grizzly作为其底层服务器,利用自身的异步特性,很好地支持了Atmosphere的实时通信需求。Atmosphere可以在多种Web...
它提供了服务器推送技术,使得服务器可以主动向客户端发送数据,而不仅仅是响应客户端的请求。CometD的核心理念是通过长连接来实现双向通信,极大地提高了Web应用的交互性和实时性。 在"cometd-3.0.0.beta2-...
1. **数据推送**:通过HTTP长轮询或WebSocket,服务器可以主动向客户端推送数据,实现实时更新。 2. **数据管理**:包括数据缓存、数据同步和事务处理,确保数据的一致性和完整性。 3. **身份验证和授权**:集成企业...
- 实现了Comet技术,这是一种实现实时数据推送的技术方案,通常用于实现即时通讯、在线游戏等功能。 4. **性能优化:** - Grizzly在设计之初就考虑到了性能问题,因此它不仅提供了强大的功能,还特别注重性能优化...
在传统的HTTP协议中,每次请求都需要客户端发起,而WebSocket则在连接建立后,可以由服务器主动推送数据到客户端。 在Java中实现WebSocket服务,我们可以使用Java API for WebSocket (JSR 356)。这个API提供了一套...
这部分内容可能涉及响应式设计、移动优化、离线存储(如Service Worker)、推送通知等技术,确保Web应用在不同设备上都能良好运行。 **九、持续集成与部署** 在开发过程中,持续集成(Continuous Integration, CI...
LiveCycle Data Services是更全面的商业解决方案,除了AMF外,还包括更多的企业级特性,如数据推送、远程对象服务和事件广播。 **4. AMF与Remoting** AMF是一种二进制数据格式,用于在Flex客户端和Java EE服务器...
7. 数据推送:利用BlazeDS的LiveCycle Data Services,可以实现实时数据推送,如使用PollingDuplex或LongPolling通道。 8. 测试和调试:部署应用到服务器,通过Flex客户端测试远程调用和数据交互。 五、源码解析 在...
WebSocket是一项在Web应用中实现全双工通信的技术,允许服务器主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。这个技术被...
6. **消息推送**:如果需要实时的消息推送,可能需要研究GCM(Google Cloud Messaging)或FCM(Firebase Cloud Messaging)。 7. **服务端开发**:掌握Java Web开发技术,如Servlet、JSP、Spring MVC,以及使用...
6. **多线程处理**:为了实现实时的消息广播,服务器端可能需要使用多线程技术,确保每个新消息都能迅速地推送给所有在线用户。 7. **WebSocket**:为了提供实时通信,J2EE聊天室可能会使用WebSocket协议,它允许...
- **实时通信**:使用WebSocket或其他推送技术实现实时消息传递,确保用户可以即时看到新消息。 - **消息存储**:将聊天记录保存在数据库中,方便回溯历史聊天内容。 - **多线程处理**:为了处理多个用户的并发请求...