我正在编写一个Web服务器,其中需要在运行时注册处理程序。例如,“ / create”将为所有URL(例如“ / 123 /
”等)创建一个新的处理程序。我需要一个相应的“ / destroy / 123”,它将为“ / 123 / ”注销处理程序。
这是用于处理“ / create”的代码
package main
import (
"fmt"
"net/http"
)
type MyHandler struct {
id int
}
func (hf *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, r.URL.Path)
}
// Creates MyHandler instances and registers them as handlers at runtime
type HandlerFactory struct {
handler_id int
}
func (hf *HandlerFactory) ServeHTTP(w http.ResponseWriter, r *http.Request) {
hf.handler_id++
handler := MyHandler{hf.handler_id}
handle := fmt.Sprintf("/%d/", hf.handler_id)
http.Handle(handle, &handler)
}
func main() {
factory := HandlerFactory{0}
http.Handle("/create", &factory)
http.ListenAndServe("localhost:8080", nil)
}
我尝试通过嵌入来实现自己的多路复用器,http.ServeMux
但它在私有变量(ServeMux.m
)中保留了其模式到处理程序的映射
我要做的是创建一个自定义ServerMux
。复制中的代码GOROOT/src/pkg/net/http/server.go
。它始于837行,结束于939。
自定义ServerMux将需要一种注销方法。这应该易于实现。只需抓住锁和del()
地图条目即可。例如(所有代码未经测试):
// TODO: check if registered and return error if not.
// TODO: possibly remove the automatic permanent link between /dir and /dir/.
func (mux *MyMux) Deregister(pattern string) error {
mux.mu.Lock()
defer mux.mu.Unlock()
del(mux.m, pattern)
return nil
}
为了使用这个新的多路复用器,您需要执行以下操作:
mux := newMux()
mux.Handle("/create", &factory)
srv := &http.Server {
Addr: localhost:8080
Handler: mux,
}
srv.ListenAndServe()
通过deregister()
从另一个goroutine 调用来修改多路复用器是完全安全的,并且将修改ListenAndServe()
路由消息的方式。
4.2.4注销处理 logout元素通过导航到特定URL添加了对注销的支持。默认的注销URL是/logout,但是您可以使用logout-url属性将其设置为其他内容。有关其他可用属性的更多信息可以在命名空间附录中找到。 但是,在遵循文档中的安全设置后,URL/logout不会显示注销页面。相反,它显示 Spring Framework 4.1.6 Spring Security 4.0.0 we
在web.xml中,我有以下内容
我正在使用Spring SAML实现。SSO circle元数据xml具有注销endpoint,这有助于本地注销和全局注销。但我正在与其他一些IDP进行交互,它们的元数据xml中没有注销endpoint。 在这些场景中应该如何处理LOGOUT? 删除请求的Cookie是这个问题的唯一解决方案吗?或者这个场景有什么解决方法吗? 非常感谢你在这方面的帮助。
问题内容: 我正在开发命令行节点模块,希望能够通过网站上的链接启动它。 我想注册一个自定义协议,以使链接具有以下格式:单击它们将启动节点包。 如果没有为此的节点API(我确定不会),那么有什么办法可以通过调用系统命令从node做到这一点? 它必须在Windows,Linux和MacOS上运行。 问题答案: 这是一个有趣的想法。我认为目前没有跨平台的node.js解决方案。我确实遇到了要求同一件事的
在很多问题上,处理器的速度比硬件交流要快得多。这种代价通常是小的 I/O,可能包括网络消耗,磁盘 I/O,数据库查询,文件 I/O,还有其他与处理器不太接近的硬件使用。所以构建一个快速的系统通常是一个提高 I/O,而非在紧凑的循环里优化代码或者甚至优化算法的问题。 有两种基本的技术来优化 I/O:缓存和代表(译者注:比如用短的字符代表长的字符)。缓存是通过本地存储数据的副本,再次获取数据时就不需要
所以,我只是想处理用户从应用程序注销时的情况。当用户注销时,我调用方法,它按预期工作,即用户不再收到推送消息... 但是,如果没有internet连接方法,则deleteToken()没有帮助。尽管用户已注销,但在建立连接时仍会收到推送消息。 我该怎么处理这件事?