2012-03-09 70 views
1

我開發了一個服務器應用程序,可以發送推送消息到蘋果服務器。我已經用幾個設備測試過它,並且能夠在設備上獲取消息。問題是,我無法知道當我的數據庫中有大約一百萬個設備時,我的應用程序將如何執行。在這種情況下是否有加載測試服務器應用程序的方法?負載測試蘋果推送通知服務器應用程序

回答

1

難道你不能使用測試數據嗎?您可以用測試腳本填充數據庫。像隨機設備ID ..? Apple APS當然不會接受這些信息,但是你可以測試你的能力,不是嗎?

+0

我可以這樣做,但它會像發送100萬條消息到無效的設備ID到蘋果。有沒有機會蘋果服務器以某種方式將其視爲某種攻擊(試圖加載服務器將無效的請求)並阻止我們的應用程序一起。 – prashant 2012-03-09 15:36:49

+0

您也可以使用所有可以獲取的設備並將其ID插入數據庫多次。你會得到一個推送通知的音樂會:) – alex 2012-03-09 15:38:58

+0

在理想的情況下,我希望有一個虛擬服務器運行在與蘋果相同的端口上,它只是吃掉所有扔到它的東西。這樣我就可以在不打擾蘋果的情況下測試我的應用程序。當然,我在這裏做了一些小的假設,但是我認爲這與我在生產環境中的接近。 – prashant 2012-03-09 15:48:51

0

我看到你想要什麼,而我確實面臨同樣的問題,對我來說工作是逆向工程。 我剛剛查看了庫並檢查了驗證deviceToken的函數。所以,雖然創建虛擬設備令牌,我只是確保生成的令牌是有效的每個庫。

下面的代碼會讓你生成有效的設備令牌,現在它對你使用這個函數產生多少令牌。

def generateRandomDeviceTokenAndAppendItToJson(tokenLength: Int) { 
    val randomlyGeneratedDeviceToken = new StringBuilder() 
     randomlyGeneratedDeviceToken.append("   \"") 
     (1 to tokenLength) foreach { 
     times: Int => 
     if (tokenLength equals Device.Apple) 
     randomlyGeneratedDeviceToken.append(validCharacter().toString.charAt(0)) 
     else 
     randomlyGeneratedDeviceToken.append(Random.alphanumeric.head) 
     } 
     randomlyGeneratedDeviceToken.append("\",") 
     println(randomlyGeneratedDeviceToken) 
     writer.write(randomlyGeneratedDeviceToken.toString()) 
     } 

     private def validCharacter(): Int = { 
     val a = Random.alphanumeric.head 
     if ('0' <= a && a <= '9') 
     return (a - '0') 
     else if ('a' <= a && a <= 'f') 
     return ((a - 'a') + 10) 
     else if ('A' <= a && a <= 'F') 
     return ((a - 'A') + 10) 
     validCharacter() 
    } 

蘋果deviceToken是64個字符,所以你需要迭代64次。