`
liuzongan
  • 浏览: 93150 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

glassfish服务器推送技术

阅读更多

昨天就了一下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吧

分享到:
评论
5 楼 sway 2008-09-05  
很好,我们公司也在考虑换glassfish,就是为了推..
4 楼 TITLE02 2008-09-04  
我想问你com.sun.enterprise.web.connector.grizzly.comet的API说明文档在哪儿可以下到
3 楼 liuzongan 2008-05-04  
如果移植的确不行,但是你可以考虑使用lightStreamer,也是一个comet开发包,它也支持.net平台
2 楼 hantsy 2008-04-29  
目前这类的方案都是不可移植,也其它的服务器已经移植了Comet。如resin等。
Servlet 3.0应该会添加这方面的等价物。
1 楼 likeblood 2008-04-28  
这其实是http协议的一个特性,估计是被glassfish封装了吧
但是移植怎么办

相关推荐

    在Glassfish v2ur1 中测试grizzly comet chat demo

    Comet技术则是一种服务器推送技术,它允许服务器向客户端实时推送数据,而无需客户端反复发起请求,常用于实现聊天、股票报价等实时交互应用。 首先,Grizzly框架是Oracle JDK的一部分,它提供了网络I/O处理、协议...

    cometd实例demo

    CometD是一个基于Bayeux协议的开源JavaScript库,它实现了服务器推送技术,允许服务器主动向客户端发送数据,而不仅仅是响应客户端的请求。这个“cometd实例demo”提供了使用CometD的一个实际示例,可以帮助开发者...

    DWR push机制.pdf(免积分下)

    因此,在实现服务器向客户端推送数据的需求时,开发者不得不采取一些变通方案,包括轮询(Polling)、Comet 和 Piggyback 等技术。 - **轮询(Polling)**:客户端定期向服务器发送请求以获取最新的数据变化。虽然...

    cometd-bayeux-6.1.10.jar.zip

    Bayeux是一种通用的、跨平台的、JSON格式的消息协议,设计用于实现服务器推送技术,使得服务器能够主动向客户端发送数据,而不仅仅是响应客户端的请求。这种模式在实时应用,如聊天室、实时股票报价、在线游戏等场景...

    ChatWebSocket:使用websocket技术的聊天应用程序

    ChatWebSocket 使用Java和javascript编写的使用websocket技术的聊天应用程序服务器Websocket端点在glassfish服务器中运行。 服务器从客户端接收JSON(字符串)数据。 数据由类ChatDecoder转换为类ChatData。 之后,...

    grizzly-http-webserver-1.9.59.zip

    Atmosphere旨在解决AJAX长轮询、Comet等技术的问题,提供了一种统一的方式来处理服务器推送技术。Grizzly作为其底层服务器,利用自身的异步特性,很好地支持了Atmosphere的实时通信需求。Atmosphere可以在多种Web...

    cometd-3.0.0.beta2-distribution.tar.gz

    它提供了服务器推送技术,使得服务器可以主动向客户端发送数据,而不仅仅是响应客户端的请求。CometD的核心理念是通过长连接来实现双向通信,极大地提高了Web应用的交互性和实时性。 在"cometd-3.0.0.beta2-...

    flex lcds.war

    1. **数据推送**:通过HTTP长轮询或WebSocket,服务器可以主动向客户端推送数据,实现实时更新。 2. **数据管理**:包括数据缓存、数据同步和事务处理,确保数据的一致性和完整性。 3. **身份验证和授权**:集成企业...

    Grizzly_Architecture

    - 实现了Comet技术,这是一种实现实时数据推送的技术方案,通常用于实现即时通讯、在线游戏等功能。 4. **性能优化:** - Grizzly在设计之初就考虑到了性能问题,因此它不仅提供了强大的功能,还特别注重性能优化...

    websocket 给指定用户发送聊天消息

    在传统的HTTP协议中,每次请求都需要客户端发起,而WebSocket则在连接建立后,可以由服务器主动推送数据到客户端。 在Java中实现WebSocket服务,我们可以使用Java API for WebSocket (JSR 356)。这个API提供了一套...

    JAVA_WEB_PPT.rar_java ppt_java web_java web ppt_java.ppt

    这部分内容可能涉及响应式设计、移动优化、离线存储(如Service Worker)、推送通知等技术,确保Web应用在不同设备上都能良好运行。 **九、持续集成与部署** 在开发过程中,持续集成(Continuous Integration, CI...

    flex j2ee整合

    LiveCycle Data Services是更全面的商业解决方案,除了AMF外,还包括更多的企业级特性,如数据推送、远程对象服务和事件广播。 **4. AMF与Remoting** AMF是一种二进制数据格式,用于在Flex客户端和Java EE服务器...

    j2ee+flex+blazeds 配置实践

    7. 数据推送:利用BlazeDS的LiveCycle Data Services,可以实现实时数据推送,如使用PollingDuplex或LongPolling通道。 8. 测试和调试:部署应用到服务器,通过Flex客户端测试远程调用和数据交互。 五、源码解析 在...

    WebSocket.zip

    WebSocket是一项在Web应用中实现全双工通信的技术,允许服务器主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。这个技术被...

    仿QQ聊天安卓APP

    6. **消息推送**:如果需要实时的消息推送,可能需要研究GCM(Google Cloud Messaging)或FCM(Firebase Cloud Messaging)。 7. **服务端开发**:掌握Java Web开发技术,如Servlet、JSP、Spring MVC,以及使用...

    简单的J2EE聊天室

    6. **多线程处理**:为了实现实时的消息广播,服务器端可能需要使用多线程技术,确保每个新消息都能迅速地推送给所有在线用户。 7. **WebSocket**:为了提供实时通信,J2EE聊天室可能会使用WebSocket协议,它允许...

    JAVA-聊天室程序

    - **实时通信**:使用WebSocket或其他推送技术实现实时消息传递,确保用户可以即时看到新消息。 - **消息存储**:将聊天记录保存在数据库中,方便回溯历史聊天内容。 - **多线程处理**:为了处理多个用户的并发请求...

Global site tag (gtag.js) - Google Analytics