[英]Pubnub Not Working On Google App Engine (GAE)
我正在Google App Engine上創建一個Web應用程序,該應用程序使我可以訂閱Pubnub頻道,接收消息並將這些消息存儲到數據庫中。 我已將代碼上傳到Google App Engine,但在我查看GAE日志時似乎無法正常工作,它沒有更新。 我在Pubnub網站上的調試控制台上嘗試后,數據庫也未更新。 我很確定我的頻道名稱,訂閱和發布密鑰正確。 我從Pubnub Github Example獲取代碼。 希望這里的所有用戶都能幫助我找到並指出問題。 我對Pubnub還是陌生的,隨時可以提出建議。 非常感謝你。
我的代碼:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import org.json.JSONArray;
import org.json.JSONObject;
import com.pubnub.api.Callback;
import com.pubnub.api.Pubnub;
import com.pubnub.api.PubnubException;
import com.yihwei95.model.appdata.AppData;
class Receiver implements Callback {
public boolean successCallback(String channel, Object message) {
final String JDBC_DRIVER = "com.mysql.jdbc.GoogleDriver";
final String DB_URL = "jdbc:google:mysql"
+ "://****"
+ ":asia-northeast1"
+ ":****/****?user=****";
Connection conn = null;
PreparedStatement prst = null;
try {
if (message instanceof JSONObject) {
JSONObject obj = (JSONObject) message;
AppData ad = new AppData();
String email = obj.getString("email");
ad.setEmail(email);
String password = obj.getString("password");
ad.setPassword(password);
String token = obj.getString("token");
ad.setToken(token);
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL);
String SQL = "INSERT INTO ****"
+ "(email, password, token)"
+ "VALUES(?, ? ,?)";
prst = conn.prepareStatement(SQL);
prst.setString(1, ad.getEmail());
prst.setString(2, ad.getPassword());
prst.setString(3, ad.getToken());
prst.executeUpdate();
prst.close();
conn.close();
//@SuppressWarnings("rawtypes")
//Iterator keys = obj.keys();
//while (keys.hasNext()) {
//System.out.print(obj.get(keys.next().toString())
//+ " ");
//}
//System.out.println();
}
else if (message instanceof String) {
String obj = (String) message;
//System.out.print(obj + " ");
//System.out.println();
}
else if (message instanceof JSONArray) {
JSONArray obj = (JSONArray) message;
//System.out.print(obj.toString() + " ");
//System.out.println();
}
}
catch (Exception e) {
e.printStackTrace();
}
// Continue Listening?
return true;
}
public void errorCallback(String channel, Object message) {
//System.err.println("Channel:" + channel + "-"
//+ message.toString());
}
public void connectCallback(String channel) {
//System.out.println("Connected to channel :" + channel);
//System.out.println("Waiting for message ...");
}
public void reconnectCallback(String channel) {
//System.out.println("Reconnected to channel :" + channel);
}
public void disconnectCallback(String channel) {
//System.out.println("Disconnected to channel :" + channel);
}
}
public class Testing{
static String subscribeKey = "****";
static String publishKey = "****";
static String channel = "****";
static Pubnub pubnub = null;
public Testing(){
pubnub = new Pubnub(publishKey, subscribeKey);
postAppData();
}
private static void postAppData(){
try{
pubnub.subscribe(channel, new Receiver());
}
catch(PubnubException pubnube){
pubnube.printStackTrace();
return;
}
}
}
二手JAR
還是應該修改Web.XML文件?
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>TestingGCP</servlet-name>
<servlet-class>com.yihwei95.TestingGCPServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestingGCP</servlet-name>
<url-pattern>/testinggcp</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
GAE不允許您訂閱,因為它是長期運行的連接。 並且PubNub Java SDK v3已停產,因此建議您使用v4 SDK(仍然無法解決GAE /訂閱問題)。 應該在其他應用程序主機(如Heroku等)上運行。
不熟悉beantalk的細節,但只要它可以使您的連接保持打開狀態,它就可以正常工作。 我確實閱讀了有關使用beantalk部署Web應用程序的快速摘要,但是您不會在Web請求的上下文中使用PubNub訂閱,因為Web請求是短暫的。 您可以在Web請求中進行發布,但不進行訂閱。 訂閱可能會在您的客戶端應用程序(瀏覽器-使用JavaScript SDK)上執行。
在GAE中使用PubNub Java v4 SDK時 ,請確保在PNConfiguration實例中啟用它。 Java SDK是否可以在Google App Engine上運行嗎? KB文章 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.