小编Cha*_*tte的帖子

如何使用Golang和LabStack回显处理到多个服务的代理

我是Go和Micro-services开发的新手,但我希望我的问题会有意义:

假设我有一个微服务,可处理用户操作,例如创建,显示和更新用户,可在访问localhost:8081/users

除此之外,我还可以在微服务处理事件的创建,显示和更新localhost:8082/events

而且,在此之上,还有一个网关,该网关可以localhost:8080用作代理,将传入的请求分派到正确的服务。

我发现这段代码可以很好地从网关重定向到用户的服务:

proxy := httputil.NewSingleHostReverseProxy(&url.URL{
    Scheme: "http",
    Host:   "localhost:8081",
})
http.ListenAndServe(":8080", proxy)
Run Code Online (Sandbox Code Playgroud)

但是有两件事困扰着我:

  • 我应该如何处理多个微服务上的调度?我想要一个条件,例如:“如果客户要求localhost:8080/users,则应转到用户的服务。如果客户要求,则应转到localhost:8080/events事件的服务。(请随时告诉我这种方法是否错误)

  • 就像我在标题中提到的那样,我正在使用labstack / echo路由器,所以我不想使用来启动服务器http.ListenAndServe(":8080", proxy),而是使用类似

    e := echo.New() e.Start(":8080")

    但是我找不到如何使用此工具将代理作为参数传递。

go

5
推荐指数
1
解决办法
743
查看次数

了解DICOM图像中的BPP

几天后我使用FO-DICOM处理DICOM文件.

我正在使用一组dicom文件进行测试,并且我一直在打印"Photometric Interpretation"和"Sample Per Pixel"值,以便更好地了解我正在使用的图像类型.

对于光度学解释,结果是"MONOCHROME2",对于每像素样本,结果是"1".

通过阅读标准的第3部分,我理解的是MONOCHROME2代表灰度,从最小值开始为黑色.

但是每个像素的样本到底是什么?我认为这代表了每个像素的字节数(而不是位数)(对于灰度等级,这个逻辑是每像素有8 吗?)

但我的问题是,实际上,我的图像似乎有32 bpp.我正在使用512*512像素的图像,我将它们转换为字节数组.所以我期待512*512 = 262144字节的数组.但我得到1048630字节的数组(这比4*262144多一点)

有人有解释吗?

编辑:

这是我的一些数据:

PhotometricInterpretation=MONOCHROME2
SamplePerPixel=1
BitsAllocated=16
BitsStored=12
HighBit=11
PixelRepresentation=0
NumberOfFrames=0
Run Code Online (Sandbox Code Playgroud)

dicom

4
推荐指数
1
解决办法
837
查看次数

将String转换为可运行代码的方法有哪些?

我找不到如何将String转换为可运行的代码,例如:

val i = "new String('Yo')"
// conversion
println(i)
Run Code Online (Sandbox Code Playgroud)

应该打印

Yo
Run Code Online (Sandbox Code Playgroud)

转换后.

我在另一篇文章中找到了以下示例:

import scala.tools.nsc.interpreter.ILoop
import java.io.StringReader
import java.io.StringWriter
import java.io.PrintWriter
import java.io.BufferedReader
import scala.tools.nsc.Settings

object FuncRunner extends App {

  val line = "sin(2 * Pi * 400 * t)"

  val lines = """import scala.math._
    |var t = 1""".stripMargin

  val in = new StringReader(lines + "\n" + line + "\nval f = (t: Int) => " + line)
  val out = new StringWriter

  val settings = new Settings

  val looper …
Run Code Online (Sandbox Code Playgroud)

scala

3
推荐指数
1
解决办法
2867
查看次数

如何从头开始编写pcap文件,修饰libpcap函数?

我有这段代码,可以很好地用libpcap编写一个pcap文件(仅用于测试的以太网协议):

struct ethernet {
  u_char        mac1[6];
  u_char        mac2[6];
  u_short       protocol;
};

int main() {
  pcap_t *pd;
  pcap_dumper_t *pdumper;

  pd = pcap_open_dead(DLT_EN10MB, 65535);
  pdumper = pcap_dump_open(pd, "test.pcap");

  struct pcap_pkthdr packet_header;
  struct timeval ts;

  packet_header.ts = ts;
  packet_header.caplen = sizeof(struct ethernet);
  packet_header.len = sizeof(struct ethernet);

  struct ethernet ethernet;

  bzero(ethernet.mac1, 6);
  bzero(ethernet.mac2, 6);
  ethernet.protocol = 8977; // randomly choose
  pcap_dump((u_char*)pdumper, &packet_header, (const u_char*)&ethernet);
  pcap_close(pd);
  pcap_dump_close(pdumper);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是我想尝试不使用pcap函数,所以我开始修饰上面使用的函数。

这是我发现的来源:

pcap_open_dead函数:http ://www.wand.net.nz/trac/libtrace/browser/lib/pcap_open_dead.c?rev=808a478a2459f3cf0e8bf927fcaad371138efb20

pcap_dump_open,pcap_dump等:http : //www.opensource.apple.com/source/libpcap/libpcap-2.1/libpcap/savefile.c

所以,这是我的想法:

pcap_open_dead函数是无用的,只是实例化一个pcap_t结构(我不想在我的代码中使用)并用参数填充其值。

pcap_dump_open返回一个pcap_dumper_t(似乎就像一个FILE *),只是打开文件并在其中写入标题(如果我们不关心错误处理的话)。顺便说一句,似乎它给sf_write_header提供了“ p-> tzoff”作为参数,该参数尚未在我的代码中初始化(并且仍在工作)。关于链接类型,在我们的例子中,它等于1。 …

c pcap libpcap

0
推荐指数
1
解决办法
3545
查看次数

了解DICOM图像属性以获得轴向/冠状/矢状切口

我必须在c#中编写一个程序,能够解析DICOM并显示轴向,冠状和矢状切口.

好像这是很多工作,但我必须这样做!

我想,第一步就是理解DICOM文件.

我一直在阅读本教程http://dicomiseasy.blogspot.ru/,但他正在使用我不允许购买的这个RZDCX库.

关于DICOM属性还有一些很好的解释,我也一直在阅读标准的某些部分(首先是第3部分)

但是我很难理解它们.有那些图像属性:像素表示,像素数据,平面配置...我想理解它们是非常重要的是能够显示图像,我想我应该更多地了解像素实际如何工作以更好地理解.

但还有一件事我真的无法弄清楚:

我怎么或在哪里有三个不同的削减?(轴向/冠状/矢状).我一直在寻找标准中关于它们的属性,但我没有找到任何属性.所以我们可能会通过某种计算找到它们,但我不知道哪个变量应该用哪个公式?

dicom

0
推荐指数
2
解决办法
3526
查看次数

API的Websocket理论

我在服务器上运行一个API,该API处理用户连接和消息传递系统。

除此之外,我还在同一台服务器上启动了一个websocket,等待连接和其他东西。

假设我们可以通过Android应用访问此功能。

我很难弄清楚现在应该做什么,这是我的想法:

1-当用户连接到应用程序时,API将连接到websocket。我们仅允许Android应用在此套接字上侦听以获取新消息。当用户想要回答时,Android应用会将消息发送到API。API将接收到的消息本身写入套接字,该消息将由另一个用户使用的Android应用读取。这样,API可以在将消息写入套接字之前将消息存储在数据库中。

2- API不会以任何方式连接到websocket。Android应用程序会在需要时侦听并写入Websocket,并且在写入Websocket时也应向API发送请求,以便可以将消息存储在DB中。

可能以上都不正确,请让我知道

编辑

我已经理解了为什么我应该使用websocket,这似乎是拥有这种“实时”系统的最佳方法(例如,在收到新消息时),而不是强制客户端每隔x秒发出一次HTTP请求以检查是否存在是新邮件。

我仍然不了解的是,如何与我的数据库进行通信。抱歉,如果我的示例不清楚,但我将尝试继续进行下去:

我的消息传递系统需要将所有消息存储在我的API数据库中,以具有某种对话的历史记录。

但是似乎websocket必须与API分开运行,我的意思是这是另一个程序,对吗?因为它不是针对HTTP请求的

那么,API是否也应该侦听此网络套接字以捕获新消息并存储它们?

api-design websocket

0
推荐指数
1
解决办法
756
查看次数

在kubernetes前面添加认证代理

我在 kubernetes API 前面添加了一个代理,以便使用自制的身份验证系统对用户进行身份验证(以及其他操作)。

在此输入图像描述

我修改了 kube 配置,让 kubectl 访问代理。代理有自己的 kubeconfig 和有效的证书颁发机构数据,因此我不需要任何凭据。

到目前为止,一切正常,这是我本地需要的最低配置:

clusters:
- cluster:
    server: http://localhost:8080
  name: proxy
contexts:
- context:
    cluster: proxy
  name: proxy
current-context: proxy
Run Code Online (Sandbox Code Playgroud)

现在身份验证应该基于令牌,我希望能够将其作为 kubectl 请求标头的一部分进行传递。

我尝试了多种配置,在 kubeconfig 中添加带有令牌的用户,例如

clusters:
- cluster:
    server: http://localhost:8080
  name: proxy

contexts:
- context:
    cluster: proxy
    user: robin
  name: proxy
current-context: proxy

users:
- name: robin
  user:
    token: my-token
Run Code Online (Sandbox Code Playgroud)

或者指定一个身份验证提供者,例如

clusters:
- cluster:
    server: http://localhost:8080
  name: proxy

contexts:
- context:
    cluster: proxy
    user: robin
  name: proxy
current-context: proxy

users:
- …
Run Code Online (Sandbox Code Playgroud)

proxy kubernetes kubectl

0
推荐指数
1
解决办法
1436
查看次数

标签 统计

dicom ×2

api-design ×1

c ×1

go ×1

kubectl ×1

kubernetes ×1

libpcap ×1

pcap ×1

proxy ×1

scala ×1

websocket ×1