【问题标题】:Problems With Websocket Server in CC中的Websocket服务器问题
【发布时间】:2018-07-18 04:55:11
【问题描述】:

我需要使用 NGINX 作为 WebSocket 代理,并且我已经能够毫无问题地运行这个 tutorial。在本例中,使用 ws 和 Node.js 完成了一个简单的 WebSocket 应用程序。但是,我需要用 C 开发的应用程序替换 javascript (server.js) 中的代码。

为此,我尝试了tutorial 中显示的最后一个示例,该示例非常简单易懂。

但是,使用与 server.js 中相同的端口和配置,在运行编译后的 C 代码时,似乎无法正确建立通信。在这种情况下,当我在客户端的终端中运行 wscat 时,它似乎正在等待某些东西,因为从未见过“已连接”这个词,但通信也没有完成(这就是为什么我说它似乎在等待某些东西; 在其他情况下,例如,如果我尝试使用不同的端口,则通信将关闭,并且会显示一个句子为“错误:意外的服务器响应”)。

另一方面,在服务器端,我可以看到有一个新连接。我怀疑来自服务器的答案没有到达客户端,但我不知道为什么。 Nginx 配置正确,因为在 javascript 中完成的示例可以正常工作,并且我在 javascript 和 C 中使用相同的端口(在 server.js 中我有:'wss = new WebSocketServer({port: 8010});' 和server.c: 'server.sin_port = htons( 8010 );' 从我的角度来看它应该可以工作......)

我尝试过使用 C 语言中具有类似行为的其他示例。有谁知道这可能是什么原因?您是否推荐其他特定的 C 代码用于 WebSocket 服务器?

【问题讨论】:

  • 在这种情况下,使用纯 C 的动机是什么?如果您的部分代码需要使用 C,Node.js 可以使用 FFI 加载 C 库。
  • @tadman 这就是他想要使用的。为什么要质疑它?
  • @MustacheMoses 对于 Node.js 来说,Websocket 类型的服务器数量多得离谱,你可以扔石头打六,但对于 C 来说却很少,这就是原因。我提到这一点是因为在问题中提到了有 JavaScript 服务器,所以如果是这样的话,部分转换会更容易。
  • @tadman 是的,我已经体验过用于节点的 websocket 服务器过多的问题。 OP 可能想使用 C 来提高性能。
  • @MustacheMoses 这就是为什么 FFI + C 库非常好。你得到了所有你想要的 C,但你不会被困在每件事上都使用它,即使它不合适。

标签: javascript c nginx websocket server


【解决方案1】:

@MustacheMoses 给出的答案非常中肯(我赞成) - 套接字和 Websocket 之间存在巨大差异。

Websockets 是一种协议,它以 HTTP“升级”请求开始,然后是使用特定数据打包方案的多路复用消息交换协议。

套接字指的是较低级别的通信通道(即流套接字,例如 TCP/IP 套接字或 Unix 套接字,甚至是原始套接字)。

我还要指出,就像 node.js 一样,C 中的 websocket 库/服务器也有不同的风格。

有些库提供了几乎是 Web 框架的方法(例如,kore.io 或我自己的 facil.io micro-framework),而其他库的范围更窄

很像 node.js 包/服务器(通常用 C 或 C++ 编写),它们在性能和功能上都不同(我会在采用特定方法之前对此进行测试)。

正如@tadman 正确指出的那样,最好坚持使用现有代码库并使用 FFI 添加所需的任何 C 库

使用较低级别的语言编写高级服务(例如 Web 应用程序)有点少见。

反之亦然,使用高级语言编写低级 Web 服务器通常不太理想。

这只是我的拙见,但考虑到我正在写这篇文章,即使我是用 C 编写的 websocket 应用程序框架的作者。当需要编写一个实际的生产 Websocket 应用程序时,我通常更喜欢使用 facil.io 作为 Ruby C 扩展并用 Ruby 编写应用程序(除非 Ruby 不可用)。

【讨论】:

    【解决方案2】:

    您的问题是 websockets 和套接字之间存在非常显着的区别。套接字是更底层的网络接口,而 websocket 运行在某种网络服务器上。

    我建议为 C 使用 websocket 库。:) Here's 是我在快速谷歌搜索后发现的。该库的文档也可以在here 找到。

    【讨论】:

    • 感谢大家的澄清和解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    相关资源
    最近更新 更多