我有一个引用用户对象的帐户对象.
@Cache
@Entity
public final class Account {
@Id Long id;
@Index private Ref<User> user;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public User getUser() {
return user.get();
}
public void setUser(User user) {
this.user = Ref.create(user);
}
}
Run Code Online (Sandbox Code Playgroud)
我按照此处的建议隐藏了参考资料:http://code.google.com/p/objectify-appengine/wiki/Entities - 请注意参考资料没有 @Load注释.
当我从Android客户端调用我的Google Cloud Endpoint时,看起来Objectify会向嵌入式用户提供帐户对象,即使未指定@Load也是如此.
@ApiMethod(name = "account.get")
public Account getAccount(
@Named("id") final Long id
) {
return ofy().load().type(Account.class).id(id).now();
}
Run Code Online (Sandbox Code Playgroud)
当我使用Apis Explorer直接查询帐户时,我同时获得了嵌入用户的帐户:
200 OK
{
"id": …Run Code Online (Sandbox Code Playgroud) 在App Engine上,我需要一个p12文件来创建签名的URL:
https://developers.google.com/storage/docs/accesscontrol#Signing-Strings
Google没有说明保留此文件的最佳做法.
我可以使用WEB-INF目录存储文件吗?然后它将成为源代码的一部分并与密码保持在一起以打开它.
这里的最佳做法是什么?还是其他方法?
-
性能怎么样?一遍又一遍地加载文件是否有效?App Engine是否自动在调用之间缓存文件(在同一实例上)?或者我需要使用servlet加载文件一次,然后以某种方式将其保存在静态变量中?有没有更好的方法来实现这一点,例如将文件存储在数据存储区记录中,然后将其保存在memcache中?这种方法有多安全?可能不好,对吧?
我们尝试coturn使用替代侦听端口进行配置,但它不起作用。我想澄清一下我们是否在做正确的事情,以及它是否因为/me stupid服务器或服务器而无法正常工作。
我们正在使用turns(安全)。我希望服务器侦听端口 5349 和 443,如果 443 具有阻止流量的 Web 代理,则默认端口和 443 以防其他一切都被阻止。我打算给客户端 2 个冗余服务器,每个端口一个。
当我配置coturn与
tls-listening-port=5349
alt-tls-listening-port=443
Run Code Online (Sandbox Code Playgroud)
只有 5349 件作品。当我更改规格顺序时,443 有效。
好像alt-tls-listening-port一点效果都没有。
我知道在使用 UDP 时,端口默认是连续的,但评论说
# Alternative listening port for TLS and DTLS protocols.
# Default (or zero) value means "TLS listening port plus one".
Run Code Online (Sandbox Code Playgroud)
和非 TLS 部分
# This is needed for RFC 5780 support
# (STUN extension specs, NAT behavior discovery). The TURN Server
# supports RFC …Run Code Online (Sandbox Code Playgroud) 我想有效地查询索引字段以检索索引字段不为空(存在于索引中)的所有记录.要查询的字段包含Ref<T>另一个实体,如果这是相关的.
我能做的是不等式搜索,比如.filter/.filterKey("fieldname >=", "a"),a是我想要抓取的最小的ASCII.
但这有效吗?或者我可以以某种方式进行相等搜索,它会返回索引中存在的所有记录吗?
-
这就是我的数据的样子:我想过滤"overlay"列有一个键的所有记录,并省略那些没有设置字段的记录.我想尽可能使用相等过滤器,所以我不需要复合索引(因为我同时在其他字段上过滤).

-
我可以用它来测试 != null
.filter("user >", "\uFFFD");
Run Code Online (Sandbox Code Playgroud)
这是为了测试 == null
.filter("user <", "\uFFFD");
Run Code Online (Sandbox Code Playgroud)
我猜这不是它应该做的方式.有没有办法用平等而不是不平等来解决这个问题?
Apache已弃用DefaultHttpClient,但似乎Android并非如此,另请参阅此处不推荐使用Java HttpClient - 它有多难?
输入
org.apache.httpcomponents:httpclient:4.3.5
Run Code Online (Sandbox Code Playgroud)
代替
new DefaultHttpClient();
Run Code Online (Sandbox Code Playgroud)
我现在用
HttpClient httpClient = HttpClientBuilder.create().build();
Run Code Online (Sandbox Code Playgroud)
创建一个http客户端.这在Java项目中工作正常,但在Android项目中使用时,缺少以下导入
import org.apache.http.impl.client.HttpClientBuilder;
Run Code Online (Sandbox Code Playgroud)
而
HttpClient sendClient = new DefaultHttpClient();
Run Code Online (Sandbox Code Playgroud)
未在Android中标记为已弃用且编译良好.
我不想再次添加Apache httpclient(如果我这样做,Android Studio无论如何都会排除它).
Android文档在这里说http://developer.android.com/reference/android/net/http/AndroidHttpClient.html#newInstance(java.lang.String)来使用
AndroidHttpClient.new Instance(string)
Run Code Online (Sandbox Code Playgroud)
"获得具有合理默认值的http客户端".
有谁知道在Android上创建HttpClient的正确方法是什么,以及userAgent字符串是什么!?
我想回拨服务器以确认我的客户端已接到电话。在相反的方向,这是大量记录并且工作正常,但是我如何从客户端确认?
注意:我在 Android 上使用 socket-io-java-client https://github.com/socketio/socket.io-client-java,而不是 JavaScript,但这应该无关紧要。好吧,也许确实如此。
socket.on("onMessage", new Emitter.Listener() {
@Override public void call(Object... args) {
// I have the args here and the last argument is a callback,
// but what do I need to do to callback the server using that arg?
}
})
Run Code Online (Sandbox Code Playgroud)
在 Swift 中它看起来像这样,但我无法弄清楚如何使用上述库在 Java 中执行此操作。
socket.on("onMessage") { data, ack in
ack?()
}
Run Code Online (Sandbox Code Playgroud)
有没有人这样做过或知道如何实现这一目标?
根据 RFC 4566 https://www.rfc-editor.org/rfc/rfc4566#page-22,sdp 中的 m= 行包含一个端口:
m=audio 49170 RTP/AVP 0
ICE候选港口不是已经确定了吗?这些还包含端口:
a=candidate:1 1 UDP 2130706431 10.0.1.1 8998 typ host
正如 RFC 5245 https://www.rfc-editor.org/rfc/rfc5245#page-9所述,
“ICE 是提供/应答模型的扩展,其工作原理是在 SDP 提供和应答中包含多个 IP 地址和端口,然后通过点对点连接检查来测试连接性。”
这是否意味着 m= 行中指定的端口已过时?
当使用 libjingle 创建新的 sdp Offer 时,它显示 IP 地址0.0.0.0以及端口 9(这是“丢弃”端口)。所以它显然没有看到 m= 行中的相关端口:
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 9 102 0 8 106 105 13 127 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
Run Code Online (Sandbox Code Playgroud)
有人知道吗?
在Java中,我有一个带签名的函数,其中传入了一个Type:
public Object convert(Object object, Type type) {
}
Run Code Online (Sandbox Code Playgroud)
在函数内部,我想确定Type是否为String,但是当我这样做时
String.class.equals(type.getClass())
Run Code Online (Sandbox Code Playgroud)
Android Studio告诉我'equals()' between objects of inconvertible types 'Class<capture of ? extends Type>' and 'Class<String>'.
我究竟做错了什么?
假设我们的 Netty 服务器 (4.1.32) 响应 HTTP 调用。我们进一步假设它必须在回答传入请求之前执行某些阻塞操作,例如,它必须执行传出调用(此处使用不同的库)来加载外部数据。
具有持久连接的NioEventLoopGroup的线程数讨论
如果我的 messageReceived 方法阻塞或需要很长时间才能完成,会发生什么情况?
@Maksym 回应
您应该避免在处理程序中使用线程阻塞操作。
很明显,工作线程的数量是有限的。因此,有效地阻塞所有可用的工作线程意味着 Netty 将对任何进一步的请求进行排队,直到工作线程变得可用。
另一方面,按照建议将阻塞操作移至我自己的线程上,将对线程切换产生性能影响,而反过来,可用硬件将阻塞的是我自己的线程池。恕我直言,使用我自己的线程池只会增加另一层复杂性,但不会提高性能。相反,我宁愿增加工作线程的最大数量,并让 Netty 完成对请求进行排队的工作。
这里建议的做法是什么?
我在Observable中解析SVG文件.在解析XML时,点作为"Path"对象发出.解析发生在一个单独的线程中,我想逐点绘制SVG文件.换句话说,我想逐个向UI发射点,例如每50毫秒一个.
private void drawPath(final String chars) {
Observable.create(new Observable.OnSubscribe<Path>() {
@Override public void call(Subscriber<? super Path> subscriber) {
try {
while ([omitted]) {
// omitted: a lot of processing
// an XML path from an SVG file is parsed into an Android path to be drawn on a canvas
// this happens point by point
subscriber.onNext(path); // emit path point by point as the XML is processed
}
}
subscriber.onCompleted();
} catch (Exception e) {
subscriber.onError(e);
}
}
}).buffer(50, TimeUnit.MILLISECONDS, …Run Code Online (Sandbox Code Playgroud)