【问题标题】:Socket programming or a REST service套接字编程或 REST 服务
【发布时间】:2016-03-15 18:49:47
【问题描述】:

我的任务是编写一个服务器套接字,它会响应不同的 url 路径。每个 url 路径都应该调用服务器上的特定方法。例如:

http://localhost/init
http://localhost/method1
http://localhost/method2

我不知道这是否可以通过套接字实现,我也认为这应该可以通过 Web (REST) 服务实现。套接字也可以吗?

查看服务器端套接字示例 [1],它们都有一个固定的 url。

【问题讨论】:

  • 您能否详细介绍一下您要解决的问题?
  • “查看服务器端套接字示例 [1],它们都有固定的 url。” - TCP 套接字不连接到 url,而是连接到 IP 地址。 HTTP 是 TCP 之上的一层,它隐藏了 TCP 的所有 gobble-de-gook

标签: c# rest sockets


【解决方案1】:

我不是 C# 专家,但我已经用 Java-Sockets 编写了一些小型网络服务器。本质上,http-requests 使用 TCP 套接字。 所以技术上的 REST-Service 是通过使用这些套接字来实现的。

http://localhost/init 将发送一个带有 http-get 标头的 http 请求到 localhost。标题看起来像这样:

GET /init HTTP/1.1
Host: localhost

您可以看到,您可以阅读第一行并决定您请求的 URL(在本例中为“init”)。在开始在套接字上编写小型 Web 服务器之前,您应该先阅读一些有关 http-protocoll 和 http-header 的内容。

【讨论】:

  • 我想这就是我要找的。现在我只需要弄清楚如何获取请求头并解析它们。
  • 如果你有一个 TCP 连接,你可以在之后直接从它的流中读取头部。想想一种分割标题的方法。我用的是正则表达式,但你可以用你想要的。
【解决方案2】:

你链接到的那个教程很糟糕,不要用它来学习套接字。套接字与编程语言无关,因此如果您真的想学习一些东西,请购买一本关于网络编程的好书。

然后您将学习通过使用层来可视化和抽象网络。套接字为您抽象出所有杂乱的网络层,为您提供一个字节流来读取和写入。

仅此一项并不能让两个应用程序进行对话。您需要一个在此套接字上分层的应用程序协议来构建您的消息。 HTTP 就是这样一种协议。

所以没有“套接字代替 HTTP”这样的东西。没有套接字就不能拥有 HTTP(从技术上讲,你可以,但没有人这样做)。反过来,REST 位于 HTTP 之上。

所以您只想使用 ASP.NET Web API。这为您提供了一个易于编程的 REST 接口,隐藏了 HTTP、套接字和下面的所有内容的所有细节。

【讨论】:

    猜你喜欢
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多