我刚刚开始学习ZeroMQ,并希望在学习的同时构建一个分布式的webcrawler作为示例.
我的想法是有一个用PHP编写的"服务器",它接受一个应该开始爬行的URL.
Worker(C#cli)必须抓取该URL,提取链接,并将它们推回到服务器上的堆栈中.服务器不断将堆栈中的URL发送给工作人员.也许redis会跟踪所有已爬网的网址,因此我们不会多次抓取网站,并且能够提取当前进程的统计信息.
我想让服务器均匀地分配任务,注意新工作/缺少工作人员,并在工人没有响应时重新分配网址.
为什么PHP服务器:我对PHP非常熟悉,就是这样.我不想让示例/测试项目更复杂.
为什么C#为minions:因为它在大多数Windows机器上运行.我可以将可执行文件提供给各种朋友,他们可以执行它并帮助我测试我的项目.
抓取过程和redis功能不是我的问题的一部分.
我的第一种方法是PUSH/PULL模式,它通常适用于我的场景,但不知道它的仆从.我想我需要一个中间经销商/经纪人经纪人,并且必须为自己处理工人意识.
我发现了这个问题,但我不确定我是否理解答案......
我想要一些提示如何强制zmq的东西.经销商的方法是否正确?有没有办法获得自动工人意识?我想我需要一些资源/示例,或者你认为我只需要深入研究zmq指南?
但是,朝正确方向的一些提示会很棒:)
干杯
使用新发布的VSCode编辑器/ IDE.我想在一个非常基本的Node.JS CLI应用程序上尝试调试,该应用程序使用"prompt"npm包:
prompt.start();
prompt.get(schema, function (err, result) { ...
Run Code Online (Sandbox Code Playgroud)
当我设置一些断点并启动应用程序调试时,VSCode只是跳过prompt.get()并在调试过程中挂起,直到我强制停止它,这结束于错误"OpenDebug进程意外终止".
我希望VSCode打开一个我可以与之交互的shell.
我的猜测是它还没有以正确的方式实现,但可能我只是想不出来......
debugging command-line-interface node.js xubuntu visual-studio-code
我刚开始学习Go.当天的课程是将数据库处理程序包装在结构中以避免使用全局范围变量.我以为到目前为止我已经理解了它,并且想要像之前那样推迟Close()方法,它以堆栈溢出结束.
我无法找到解释为什么会发生这种情况,也没有找到适当的方法.
这是关键代码:
package exporter
type DB struct {
*sqlx.DB
queriesExecuted int
}
func Open(dataSourceName string) *DB {
connection := sqlx.MustConnect("mysql", dataSourceName)
db := &DB{connection, 0}
return db
}
func (db *DB) Close() {
db.Close() // this is where the stack growth happens
}
func (db *DB) GetArticles() []oxarticle {
...
}
Run Code Online (Sandbox Code Playgroud)
package main
func main() {
exporter := feedexporter.Open("root:pass@/feedexport")
defer exporter.Close()
articles := exporter.GetArticles()
}
Run Code Online (Sandbox Code Playgroud)
一切正常,没有defer exporter.Close(),包括它以:
运行时:goroutine堆栈超过1000000000字节限制
致命错误:堆栈溢出
不关闭连接感觉很糟糕;)什么是处理这个问题的方法?