发送推送通知时出现连接错误

时间:2016-06-29 07:14:09

标签: android node.js notifications google-cloud-messaging

我有一个Android应用程序,其后端是nodejs sails服务器。我在服务器上安装了GCM推送通知服务,我可以使用

向我的应用程序的用户发送推送通知
curl http://localhost:1337/notification/1000

其中例如1000是要向其发送通知的用户的用户ID。

基本上,它的工作原理是此CLI将使用用户的userID作为URL参数调用URL /notification/notification URL上定义的函数从数据库中提取此userID的GCM注册ID,并在该注册ID上向该用户发送通知,并在函数内定义消息内容和类型。

这种方法非常有效。但现在我想批量执行此操作,以便向所有用户发送通知。为此,我编写了一个python脚本

import MySQLdb
from MySQLdb.cursors import DictCursor
import os
import sys
import time
from datetime import datetime

#initiating the db
db = MySQLdb.connect(host = 'db_host', user = 'db_user_name', passwd = 'db_pass', db = 'db_schema_name')
queryCursor = db.cursor()

#finding users for whome recommendations are available
potentialUserDeterminationQuery = "select id from user"
queryCursor.execute(potentialUserDeterminationQuery)
availablePool = list(queryCursor.fetchall())
for elements in availablePool:
    userID = int(elements[0])
    os.system("curl http://localhost:1337/notification/" + str(userID))
queryCursor.close()
db.close()

我的问题:当我使用此方法发送批量通知时,通知会发送给许多用户,但也不会发送给很多用户。当通知无法发送给用户时,我收到以下服务器响应:

connection refused on port 1337

我的解决方法:

(1)我想出服务器可能无法以此速度处理通知请求。所以我在使用time.sleep(0.02)发送每个通知后引入了20毫秒的延迟,并再次运行了脚本。但是再次发生的是,由于这个错误,很少有用户没有收到通知,而其他人则得到了。

(2)如果数据库没有正确存储GCM注册ID,则问题可能出在userID,因此服务器无法接受请求。所以我尝试通过CLI向该用户发送单独的推送通知,并且它有效。用户通过CLI单独发送时收到通知。

(3)这可能是批量通知脚本的周期性问题。因此,我在脚本循环中替换了userID,从userID = int(elements[0])userID = bugID bugID是在批量消息传递过程中未向其发送通知的其中一个用户的用户ID。所以本质上我在一个用户上模拟了所有用户的批量消息。在此测试中,所有消息都传递给该用户,没有任何服务器连接拒绝错误。

除了这三种方法之外,还有什么可行的解决方法,以便我可以检测到问题并修复系统,然后将通知发送给所有人。

0 个答案:

没有答案