浏览 436 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-04-18
昨天就了一下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吧 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
| 返回顶楼 | |
|
时间:2008-04-28
这其实是http协议的一个特性,估计是被glassfish封装了吧
但是移植怎么办 |
|
| 返回顶楼 | |
|
时间:2008-04-29
目前这类的方案都是不可移植,也其它的服务器已经移植了Comet。如resin等。
Servlet 3.0应该会添加这方面的等价物。 |
|
| 返回顶楼 | |
|
时间:2008-05-04
如果移植的确不行,但是你可以考虑使用lightStreamer,也是一个comet开发包,它也支持.net平台
|
|
| 返回顶楼 | |




