⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pushletpingapplication.java

📁 Java下Comet的实现框架Pushlet例子。 实现实时推送数据到客户端。 服务器每隔30-500MS产生一个随机数
💻 JAVA
字号:
// Copyright (c) 2000 Just Objects B.V. <just@justobjects.nl>
// Distributable under LGPL license. See terms of license at gnu.org.

package nl.justobjects.pushlet.test;

import nl.justobjects.pushlet.client.PushletClient;
import nl.justobjects.pushlet.client.PushletClientListener;
import nl.justobjects.pushlet.core.Event;
import nl.justobjects.pushlet.core.Protocol;
import nl.justobjects.pushlet.util.PushletException;

import java.util.HashMap;
import java.util.Map;

/**
 * Tester to demonstrate Pushlet use in Java applications.
 *
 * This program does two things:
 * (1) it subscribes to the subject "test/ping"
 * (2) it publishes an Event with subject "/test/ping" every few seconds.
 *
 * @version $Id: PushletPingApplication.java,v 1.15 2005/02/21 16:59:17 justb Exp $
 * @author Just van den Broecke - Just Objects &copy;
 **/
public class PushletPingApplication extends Thread implements PushletClientListener, Protocol {
	private PushletClient pushletClient;
	private String host;
	private int port;
	private static final String SUBJECT = "/test/ping";
	private static final long PUBLISH_INTERVAL_MILLIS = 3000;

	public PushletPingApplication(String aHost, int aPort) {
		host = aHost;
		port = aPort;
	}

	public void run() {
		// Create and start a Pushlet client; we receive callbacks
		// through onHeartbeat() and onData().
		try {
			pushletClient = new PushletClient(host, port);
			pushletClient.setDebug(true);
			pushletClient.join();
			pushletClient.listen(this, Protocol.MODE_STREAM);

			// Test subscribe/unsubscribe
			String subscriptionId = pushletClient.subscribe(SUBJECT);
			pushletClient.unsubscribe(subscriptionId);

			// The real subscribe
			pushletClient.subscribe(SUBJECT);
			p("pushletClient started");
		} catch (PushletException pe) {
			p("Error in setting up pushlet session pe=" + pe);
			return;
		}

		// Publish an event to the server every N seconds.
		Map eventData = new HashMap(2);
		int seqNr = 1;
		while (true) {
			try {
				// Create event data
				eventData.put("seqNr", "" + seqNr++);
				eventData.put("time", "" + System.currentTimeMillis());

				// POST event to pushlet server
				pushletClient.publish(SUBJECT, eventData);

				p("published ping # " + (seqNr - 1) + " - sleeping...");
				Thread.sleep(PUBLISH_INTERVAL_MILLIS);
			} catch (Exception e) {
				p("Postlet exception: " + e);
				System.exit(-1);
			}
		}
	}

	/** Error occurred. */
	public void onError(String message) {
		p(message);
	}

	/** Abort event from server. */
	public void onAbort(Event theEvent) {
		p("onAbort received: " + theEvent);
	}

	/** Data event from server. */
	public void onData(Event theEvent) {
		// Calculate round trip delay
		long then = Long.parseLong(theEvent.getField("time"));
		long delay = System.currentTimeMillis() - then;
		p("onData: ping #" + theEvent.getField("seqNr") + " in " + delay + " ms");
	}

	/** Heartbeat event from server. */
	public void onHeartbeat(Event theEvent) {
		p("onHeartbeat received: " + theEvent);
	}

	/** Generic print. */
	public void p(String s) {
		System.out.println("[PushletPing] " + s);
	}

	/** Main program. */
	public static void main(String args[]) {
		for (int i = 0; i < 1; i++) {
			if (args.length == 0) {
				new PushletPingApplication("localhost", 8080).start();
			} else {
				// Supply a host and port
				new PushletPingApplication(args[0], Integer.parseInt(args[1])).start();
			}
		}

	}
}


/*
 * $Log: PushletPingApplication.java,v $ * Revision 1.15  2005/02/21 16:59:17  justb * SessionManager and session lease introduced *
 * Revision 1.14  2005/02/21 11:50:48  justb
 * ohase1 of refactoring Subscriber into Session/Controller/Subscriber
 *
 * Revision 1.13  2005/02/20 13:05:33  justb
 * removed the Postlet (integrated in Pushlet protocol)
 *
 * Revision 1.12  2005/02/18 09:54:15  justb
 * refactor: rename Publisher Dispatcher and single Subscriber class
 *
 * Revision 1.11  2005/02/15 15:46:37  justb
 * client API improves
 *
 * Revision 1.10  2005/02/15 13:28:08  justb
 * use new protocol lib and publish with PushletClient
 *
 * Revision 1.9  2004/10/24 13:52:52  justb
 * small fixes in client lib
 *
 * Revision 1.8  2004/10/24 12:58:19  justb
 * revised client and test classes for new protocol
 *
 * Revision 1.7  2004/09/03 22:35:37  justb
 * Almost complete rewrite, just checking in now
 *
 * Revision 1.6  2004/08/12 13:18:54  justb
 * cosmetic changes
 *
 * Revision 1.5  2004/03/10 14:53:10  justb
 * new
 *
 * Revision 1.4  2003/08/17 20:30:20  justb
 * cosmetic changes
 *
 * Revision 1.3  2003/08/15 08:37:41  justb
 * fix/add Copyright+LGPL file headers and footers
 *
 * Revision 1.2  2003/05/18 16:15:08  justb
 * support for XML encoded Events
 *
 * Revision 1.1.1.1  2002/09/24 21:02:33  justb
 * import to sourceforge
 *
 * Revision 1.1.1.1  2002/09/20 22:48:19  justb
 * import to SF
 *
 * Revision 1.1.1.1  2002/09/20 14:19:02  justb
 * first import into SF
 *
 * Revision 1.3  2000/08/31 12:49:50  just
 * added CVS comment tags for log and copyright
 *
 *
 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -