【发布时间】: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