在我的GAE服务器中,数据存储区读取操作在12小时后达到100%,我有大约20个用户。
与我的应用程序中的其他操作一起,我构建了一个聊天,其中连接到我的应用程序的用户每1秒汇集一次服务器。因此,我向/message
提出了很多请求,但我不访问数据存储区。
/message
(约42K)的请求数与最大数据存储读取操作(50k)之间是否存在关联?
已编辑:
代码/message
:
ArrayListMultimap<String, ChatMessage> messages;
ServletContext application = null;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
if (application == null)
{
application = getServletContext();
messages = ArrayListMultimap.create();
}
out = response.getOutputStream();
oos = new ObjectOutputStream(out);
Object o = ServerUtils.readObject(request);
if(o instanceof ChatMessage)
{
ChatMessage message = (ChatMessage) o;
messages.put(message.getReciverId(), message);
List<ChatMessage> list = (List<ChatMessage>) messages.get(message.getReciverId());
}
else if(o instanceof String)
{
String sender = (String) o;
List<ChatMessage> list = (List<ChatMessage>) messages.removeAll(sender);
ArrayList<ChatMessage> newList = new ArrayList<ChatMessage>(list);
reponseToClient(newList);
}
}
答案 0 :(得分:2)
一个好的起点是设置Appstats。这将显示您正在进行数据存储读取以及哪些读取需要很长时间。 https://developers.google.com/appengine/docs/java/tools/appstats
此外,请考虑使用channelApi或xmpp代替轮询。 https://developers.google.com/appengine/docs/java/xmpp/overview https://developers.google.com/appengine/docs/java/channel/
答案 1 :(得分:0)
您的应用会话是否已启用? Sessions work by storing its data in the datastore for persistence,这可能是每次请求进入/ message处理程序时读取的内容。