使用 socket.io,我通过 GCLB 代理的 WebSocket 连接按照后端服务配置中定义的时间间隔关闭:
显然如图所示,解决方法是一个不切实际的长超时时间,但为了正确起见,通过 socket.io(或其他地方,如果不是 socket.io 的问题)配置 WebSocket 连接以避免这些的正确方法是什么关闭?
根据 GCLB 日志关闭的原因是"backend_connection_closed_after_partial_response_sent".
正如 Cloud Load Balancer 文档中所述,我们似乎需要发送适当的升级响应,以便负载均衡器保持连接有效。
当 HTTP(S) 负载平衡识别出来自 HTTP(S) 客户端的 WebSocket 升级请求,并且该请求之后是来自后端实例的成功升级响应时,负载平衡器会在当前连接期间代理双向流量。如果后端没有返回成功的升级响应,负载均衡器将关闭连接。
https://cloud.google.com/load-balancing/docs/https/#websocket_proxy_support(强调我的)
如何才能做到这一点?
我正在尝试编写一个通用的性能日志记录函数,我可以传递任何方法来定时,它会将执行时间记录到我的数据库中.我在大多数情况下都有这个工作,但在传递返回的方法时遇到编译器错误void:
no instance(s) of type variable(s) T exist so that void conforms to T
Run Code Online (Sandbox Code Playgroud)
这是我的班级:
public class Performance {
public static <T> T measureExecTime(Callable<T> c, String gid, String name) {
T call = null;
try {
if (Constants.DEBUG) {
Calendar start = Calendar.getInstance();
call = c.call();
Calendar end = Calendar.getInstance();
long diff = end.getTimeInMillis() - start.getTimeInMillis();
// log diff to database
} else {
call = c.call();
}
} catch (Exception e) {
e.printStackTrace();
}
return call;
} …Run Code Online (Sandbox Code Playgroud)