首先,我按照本指南https://developers.google.com/identity/sign-in/web/和此参考https://developers.google.com/identity/sign-in/web/reference.
但是我没有声明回调window,而是使用gapi.signin2.render函数来渲染按钮并在我的Angular控制器中为它添加一个处理程序.
登录工作正常,问题是,当我尝试通过调用注销时gapi.auth2.getAuthInstance().signOut(),它只是没有这样做.
我注意到accounts.google.com的sessionStorage仍然存在,因此当我在登录屏幕上再次呈现按钮时,Google会自动重新登录.
我试过看完signOut()完成后会发生什么:
gapi.auth2.getAuthInstance().signOut().then(function() {
console.log(gapi.auth2.getAuthInstance().isSignedIn.get());
// prints 'true'
});
Run Code Online (Sandbox Code Playgroud)
我也试过调用disconnect()而不是signOut()知道它会撤销访问权限,它确实从sessionStorage中删除了令牌,但用户会话仍在那里.一旦我重新加载页面,它就消失了.
这是我的完整代码:
$scope.logout = function() {
//...
gapi.auth2.getAuthInstance().signOut().then(function() {
console.log(gapi.auth2.getAuthInstance().isSignedIn);
});
};
$scope.processAuth = function(authResult) {
console.log("success");
if(authResult.getAuthResponse().id_token) {
// backend calls
}
};
$scope.renderSignInButton = function() {
console.log(gapi.auth2);
gapi.signin2.render('signInButton',
{
'onsuccess': $scope.processAuth, // Function handling the callback.
'onfailure': $scope.signinFailed, // Function handling the callback.
'clientid': 'asdasdasd.apps.googleusercontent.com',
'scope': 'https://www.googleapis.com/auth/userinfo.email',
'cookiepolicy': 'single_host_origin'
} …Run Code Online (Sandbox Code Playgroud) 基本思想是访问.mp3文件并通过RTP流将其发送给其他想要播放该歌曲的客户端.
这是RTPServer.java,我在网上找到并根据自己的喜好进行了修改.
__CODE__在__CODE__窗口上获取整个屏幕的设备上下文,并可以通过调用来跟进__CODE__:
package server;
import java.net.InetAddress;
import javax.media.rtp.*;
import javax.media.rtp.rtcp.*;
import javax.media.*;
import javax.media.protocol.*;
import javax.media.control.*;
public class RTPServer implements ControllerListener, Runnable {
private boolean realized = false;
private boolean configured = false;
private String ipAddress;
Processor p;
MediaLocator src;
public static void main (String[] args) {
RTPServer rtp = new RTPServer("192.168.1.101", "04 - Blue.mp3");
Thread t = new Thread(rtp);
t.start();
}
public RTPServer(String ip, String song) {
ipAddress = ip;
String srcFile = …Run Code Online (Sandbox Code Playgroud) 通过这里回答的几个例子和问题(主要是 http://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.html?page=3),我想让服务器发送多个响应没有完成请求的客户的时间.当请求超时时,我创建另一个,依此类推.
我想避免长时间轮询,因为每次收到响应时我都必须重新创建请求.(而且这不是servlet 3.0的异步功能所针对的).
我在服务器端有这个:
@WebServlet(urlPatterns = {"/home"}, name = "async", asyncSupported = true)
public class CometServlet extends HttpServlet {
public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException {
AsyncContext ac = request.startAsync(request, response);
HashMap<String, AsyncContext> store = AppContext.getInstance().getStore();
store.put(request.getParameter("id"), ac);
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个写入异步上下文的线程.
class MyThread extends Thread {
String id, message;
public MyThread(String id, String message) {
this.id = id;
this.message = message;
}
public void run() {
HashMap<String, AsyncContext> store = AppContext.getInstance().getStore();
AsyncContext ac …Run Code Online (Sandbox Code Playgroud) java ×2
angularjs ×1
audio ×1
google-api ×1
java-ee ×1
javascript ×1
jmf ×1
mp3 ×1
server-push ×1
servlet-3.0 ×1
servlets ×1
streaming ×1